八、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