美文网首页
2.2.2. 路由管理

2.2.2. 路由管理

作者: 努力生活的西鱼 | 来源:发表于2020-04-09 18:15 被阅读0次
路由传值

很多时候,在路由跳转时我们需要带一些参数。

创建TipRoute路由

它接收一个提示文本参数,负责将传入它的文本显示在页面上,另外添加一个返回按钮,点击后在返回上一个路由的同时会带上一个返回参数。

class TipRoute extends StatelessWidget {

  final String text;

  TipRoute({
    Key key,
    @required this.text // 接收一个text参数
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(title: new Text("提示")),
      body: new Padding(
        padding: EdgeInsets.all(18),
        child: new Center(
          child: new Column(
            children: <Widget>[
              new Text(text),
              RaisedButton(
                onPressed: () => Navigator.pop(context,"我是返回值"),
                child: new Text("返回"),
              )
            ],
          ),
        ),
      ),
    );
  }
}

打开新路由的代码

class RouterTestRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("RouterTestRoute"),
      ),
      body: new Center(
        child: new RaisedButton(
          onPressed: () async {
            var result = await Navigator.push(context,
                MaterialPageRoute(builder: (context) {
              return new TipRoute(text: "我是路由XXX");
            }));
            print("路由返回值: $result");
          },
          child: new Text("打开提示页"),
        ),
      ),
    );
  }
}

点击返回按钮和导航栏箭头后,显示的内容。

I/flutter: 路由返回值: 我是返回值
I/flutter: 路由返回值: null
命名路由

命名路由即有名字的路由,可以先给路由起一个名字,然后就可以通过路由名字直接打开新的路由了。

路由表

先提供并注册一个路由表,这样程序才知道哪个名字与哪个路由组件相对应。
路由表的定义如下:

Map<String, WidgetBuilder> routes;

它是一个Map,key为路由的名字,是个字符串;value是个builder回调函数,用于生成相应的路由widget。

注册路由表
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
        title: "Flutter Demo",
        theme: new ThemeData(primarySwatch: Colors.blue),
        // 注册路由表
        routes: {
          "new_route": (context) => new NewRoute(),
        },
        home: new MyHomePage(title: "Flutter Demo Home Page")
    );
  }
}
home注册为命名路由
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
        title: "Flutter Demo",
        initialRoute: "/", // 名为"/"的路由作为应用的home(首页)
        theme: new ThemeData(primarySwatch: Colors.blue),
        // 注册路由表
        routes: {
          "new_route": (context) => new NewRoute(),
          "/": (context) => MyHomePage(title: "Flutter Demo Home Page") // 注册首页路由
        },
        // home: new MyHomePage(title: "Flutter Demo Home Page")
    );
  }
}

在路由表中注册一下MyHomePage路由,然后将其名字作为MaterialApp的initialRoute属性值即可,该属性决定应用的初始路由页是哪一个命名路由。

通过路由名打开新路由页

要通过路由名称来打开新路由,可以使用Navigator的pushNamed方法:

Future pushNamed(BuildContext context, String routeName,{Object arguments})

除了pushNamed方法,还有pushReplacementNamed等其他管理命名路由的方法。

onPressed: () {
   // 导航到新路由
   Navigator.pushNamed(context, "new_route");
},
命名路由参数传递

先注册一个路由

// 注册路由表
routes: {
  "new_route": (context) => new EchoRoute(),
},

在打开路由时传递参数

onPressed: () {
    // 导航到新路由
    Navigator.pushNamed(context, "new_route",arguments: "Hi");
},

在路由页通过RouteSetting对象获取路由参数:

class EchoRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var args = ModalRoute.of(context).settings.arguments;
    print(args);
    ...
  }

}

输出:

I/flutter: Hi
适配
routes: {
   "new_route": (context) => new EchoRoute(),
   "/": (context) => MyHomePage(title: "Flutter Demo Home Page"),
   "tip_route": (context){
      return new TipRoute(text: ModalRoute.of(context).settings.arguments);
   },
},

相关文章

  • 2.2.2. 路由管理

    路由传值 很多时候,在路由跳转时我们需要带一些参数。 创建TipRoute路由 它接收一个提示文本参数,负责将传入...

  • springQuartz定时器

    版本springframework:4.2.2.RELEASE;quartz:2.2.2.参见 定时器。 1、依赖...

  • Day13 - Flutter - 路由导航

    概述 路由管理 路由基本使用 命名路由使用(重点) 页面跳转的拓展 一、路由管理 1.1、认识Flutter路由路...

  • Flutter路由,跳转传值

    路由 Flutter 中的路由就是页面跳转。通过 Navigator 组件管理路由导航。并提供了管理堆栈的方法。 ...

  • 路由管理

    路由管理

  • Flutter 之 路由管理

    路由管理 待续

  • react-router v4 路由管理组件库

    react-router V4 概念:一个路由管理的组件库,包含多个路由组件 几个重要组件Router:管理路由的...

  • Flutter开发 -- [16 - 路由导航]

    一. 路由管理 1.1. 认识Flutter路由 路由的概念由来已久,包括网络路由、后端路由,到现在广为流行的前端...

  • react路由基础配置

    1、根据路径加载对应页面内容2、路由跳转3、路由懒加载4、嵌套路由(子路由)5、路由管理6、路由跳转权限校验 1、...

  • 路由选择之静态路由

    路由的几种来源 直连路由 静态路由 动态路由 静态路由简介 是一种需要管理员手工配置的特殊路由,在不同网络环境中有...

网友评论

      本文标题:2.2.2. 路由管理

      本文链接:https://www.haomeiwen.com/subject/zgchmhtx.html