flutter 企业级路由fluro使用记录

Fluro企业级路由

地址:https://pub.flutter-io.cn/packages/fluro

导入:

dependencies:
  fluro: ^1.7.8
$ flutter pub get

创建配置文件:

创建routes.dart,用来注册路由。

import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app/route/router_handlers.dart';

class Routes{
  //注册路由名称
  static String root = '/';
  static String page1 = '/page1';

  static void configureRouts(FluroRouter router){
    router.notFoundHandler = Handler(
      // ignore: missing_return
      handlerFunc: (BuildContext context,Map<String,List<String>> params){
        print("ROUTE WAS NOT FOUND !!!");
      }
    );
  //此处handler在下方 router.define(root, handler: rootHandler); router.define(page1, handler: page1Handler); } }

创建router_handlers.dart管理页面以及参数传递

import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app/pages/home.dart';
import 'package:flutter_app/pages/page1.dart';

//不需要传参数
var rootHandler =Handler(
  // ignore: missing_return
  handlerFunc:(BuildContext context,Map<String,List<String>> params){

    return HomePage();
  }
);

//普通类型参数 通过url传递 在params中获取
// 数组、map、等复杂的数据模型以arguments传递
var page1Handler = Handler(
  // ignore: missing_return
  handlerFunc: (BuildContext context,Map<String,List<String>> params){
    // var id = params['id'].first;
    // var name = params['name'].first;
    var data =  context.settings.arguments;
    print(data);
    //return Page1(id,name);
    return Page1(data);
  }
);

 

创建程序级全局静态application.dart,方便调用。

import 'package:fluro/fluro.dart';

class ApplicationRouter{
  static FluroRouter router;
}

接下来就是在程序入口创建全局静态实例。

void main() {
  final router =FluroRouter();
  Routes.configureRouts(router);
  ApplicationRouter.router = router;
  runApp(MyApp());
}

然后在MaterialApp中添加

 Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      onGenerateRoute: ApplicationRouter.router.generator,//此处将注册好的router写入
    );
  }

开始使用:

在需要跳转到页面执行(不带参数)

 ApplicationRouter.router.navigateTo(context, '/page1');//此处page1为页面注册的路由名称 在routes.dart文件中

在需要跳转到页面执行(带普通String参数)

 ApplicationRouter.router.navigateTo(context, '/page1?id=123123&name=zhangsan');
//此处为url带参数方式,多个参数以&分隔,多个参数的配置参考router_handlers.dart

在需要跳转到页面执行(带参数--复杂的数据模型)

ApplicationRouter.router.navigateTo(context, '/page1',routeSettings: RouteSettings(arguments: {"key":"value","key":"value"}))
.then((value) => print(value['name']));//如果有回调参数就用.then方法接收。没有的话不用写.then方法

 跳转页面替换当前页面

ApplicationRouter.router.navigateTo(context, '/page1', replace: true);//replace 设置为true表示替换当前页为下一页。

 

接收参数页面

import 'package:flutter/material.dart';
import 'package:flutter_app/route/application.dart';

class Page1 extends StatelessWidget {
  //接收url传来的String参数
  // String id;
  // String name;
  // Page1({this.id,this.name});

  //接收复杂的数据模型参数
  var data;
  Page1(this.data);
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Container(
          child: Text(
            data[0],
            style: TextStyle(fontSize: 50, color: Colors.amber),
          ),
        ),
      ],
    );
  }
}

 返回:

返回上一页

 ApplicationRouter.router.pop(context);

清空历史记录

ApplicationRouter.router.navigateTo(context, '/page1', clearStack: true);//clearStack为true时,表示跳转到指定页面并清除历史记录

Fluro可以说是非常强大的路由插件,本人将使用过程记录下来,有不对的地方或者有问题的地方欢迎大家指出。小白一枚。

 
posted @ 2021-01-17 19:29  淡然吖  阅读(595)  评论(0编辑  收藏  举报