八、Flutter路由

作者: 星星编程 | 来源:发表于2019-07-25 12:08 被阅读19次

    目录
    一、基本路由
    二、基本路由传参
    三、命名路由
    四、命名路由传参
    五、替换路由
    六、返回到根路由

    一、基本路由

    跳转到Detail页面

      Navigator.of(context)
                  .push(MaterialPageRoute(builder: (BuildContext context) {
                return Detail();
              }));
    

    返回上一页面

     Navigator.of(context).pop();
    

    二、基本路由传参

    跳转到Detail页面,传参ID="88"

      Navigator.of(context)
                  .push(MaterialPageRoute(builder: (BuildContext context) {
                return Detail(ID:"88");
              }));
    

    返回上一页面

     Navigator.of(context).pop();
    

    三、命名路由

    初始化路由

    import 'package:flutter/material.dart';
    import 'package:flutter_shop/pages/Detail.dart';
    import 'IndexPage.dart';
    
    void main() => runApp(MyApp());
    
     class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Container(
          child: MaterialApp(
            title:'路由',
            debugShowCheckedModeBanner: false,
            theme: ThemeData(
              primaryColor: Colors.pink,
            ),
            initialRoute: '/',
            routes: {
              '/':(context)=>IndexPage(),
              '/detail':(context)=>Detail()
            },
          ),
        );
      }
    }
    
    

    跳转到Detail页面

     Navigator.pushNamed(context, '/detail');
    

    返回上一页面

     Navigator.of(context).pop();
    

    四、命名路由传参

    定义全局路由

    import 'package:flutter/material.dart';
    import 'package:flutter_shop/pages/Detail.dart';
    import 'package:flutter_shop/IndexPage.dart';
     
    
    final Map<String, Function> routes = {
      '/': (context) => IndexPage(),
      '/detail': (context) => Detail()
    };
    
    var onGenerateRoute = (RouteSettings settings) {
      final String name = settings.name;
      final Function pageContentBuilder = routes[name];
      if (pageContentBuilder != null) {
        if (settings.arguments != null) {
          final Route route = MaterialPageRoute(
              builder: (context) =>
                  pageContentBuilder(context, arguments: settings.arguments));
          return route;
        } else {
          final Route route =
              MaterialPageRoute(builder: (context) => pageContentBuilder(context));
          return route;
        }
      }
    };
    

    初始化路由

    import 'package:flutter/material.dart';
    import 'Routes.dart';
    
    void main() => runApp(MyApp());
    
     class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Container(
          child: MaterialApp(
            title:'路由',
            debugShowCheckedModeBanner: false,
            theme: ThemeData(
              primaryColor: Colors.pink,
            ),
            initialRoute: '/',
            onGenerateRoute: onGenerateRoute
          ),
        );
      }
    }
    

    跳转到Detail页面

     Navigator.pushNamed(context, '/detail', arguments: {"id": 20});
    

    返回上一页面

     Navigator.of(context).pop();
    

    五、路由替换

    比如我们从A页面跳转到了B 页面,然后B页面通过pushReplacementNamed跳转到了C页面。这个时候当我们点击C页面的返回按钮,就会跳转回A页面。

    Navigator.of(context).pushReplacementNamed('/C');
    

    六、返回根路由

    比如我们从A页面跳转到了B页面,然后从B页面跳转到了C页面,然后从C跳转到了D页面。这个时候我们想的是D返回到A页面。 这个时候就用到了返回到根路由的方法。

    Navigator.of(context).pushAndRemoveUntil(
       new MaterialPageRoute(builder: (context) => new Tabs(index:1)),
       (route) => route == null
    );
    
    路由.png 关注公众号,查看更多内容.jpg

    相关文章

      网友评论

        本文标题:八、Flutter路由

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