八、Flutter路由

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

一、基本路由

跳转到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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SPA单页应用 传统的项目大多使用多页面结构,需要切换内容的时候我们往往会进行单个html文件的跳转,这个时候受网...
    视觉派Pie阅读 14,089评论 1 55
  • 大部分应用程序都包含多个页面,并希望用户能从当前屏幕平滑过渡到另一个屏幕。移动应用程序通常通过被称为“屏幕”或“页...
    皱巴巴阅读 41,334评论 10 69
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,124评论 0 3
  • 这章来聊聊flutter的路由管理,也可以理解为页面导航,用来处理页面之间的跳转、参数传递、动画展示等功能。 路由...
    风少侠阅读 10,755评论 1 12
  • 森信一回到办公室,同事们都还在忙着,每个人各自分工做事,一看就知道是个训练有素的团队。森信带领这个团队,为公司拿下...
    季子弘阅读 949评论 0 1