Flutter 中的路由通俗的讲就是页面跳转。在 Flutter 中通过 Navigator 组件管理路由导航。并提供了管理堆栈的方法。如:Navigator.pushNavigator.pop
Flutter 中给我们提供了两种配置路由跳转的方式:1、基本路由 2、命名路由
 
 
 
  • 基本路由

比如我们现在想从 HomePage 组件跳转到 SearchPage 组件。
import 'package:flutter/material.dart';

void main() {
runApp(MaterialApp(
title: "NavigatorWidget",
home: HomePage(),
));
} class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
child: Text("跳转到搜索页面"),
onPressed: (){
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SearchPage()
)
);
},
),
)
);
}
} class SearchPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("搜索页面")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("这是搜索页面"),
RaisedButton(
child: Text("返回上一页"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
),
);
}
}
  • 基本路由+传参

import 'package:flutter/material.dart';

void main() {
runApp(MaterialApp(
title: "NavigatorWidget",
home: HomePage(),
));
} class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
child: Text("跳转到搜索页面"),
onPressed: (){
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SearchPage("我是传参")
)
);
},
),
)
);
}
} class SearchPage extends StatelessWidget {
String param;
SearchPage(this.param); @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("搜索页面")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("这是传参值:$param"),
RaisedButton(
child: Text("返回上一页"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
),
);
}
}
  • 命名路由

import 'package:flutter/material.dart';

void main() {
runApp(MaterialApp(
title: "NavigatorWidget",
initialRoute: "/",
routes: {
"/":(context) => HomePage(),
"/search":(context) => SearchPage(),
},
));
} class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
child: Text("跳转到搜索页面"),
onPressed: (){
Navigator.of(context).pushNamed("/search");
},
),
)
);
}
} class SearchPage extends StatelessWidget { @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("搜索页面")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("这是搜索页面"),
RaisedButton(
child: Text("返回上一页"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
),
);
}
}
  • 命名路由+传参(最常用的)

import 'package:flutter/material.dart';

void main() {
// 可抽离出去
final routes = {
"/":(context) => IndexPage(),
"/search":(context,{arguments}) => SearchPage(param:arguments),
}; // 可抽离出去,作为一个工具类
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;
}
}
return null;
}; runApp(MaterialApp(
title: "NavigatorWidget",
initialRoute: "/",
onGenerateRoute: onGenerateRoute,
));
} class IndexPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("主页")),
body: RaisedButton(
child: Text("跳转到搜索页面,传参为'id':123"),
onPressed: () {
Navigator.pushNamed(context, "/search",arguments: {
"id":123
});
},
color: Theme.of(context).accentColor,
textTheme: ButtonTextTheme.primary,
),
);
}
} class SearchPage extends StatelessWidget {
final Map<String,int> param;
SearchPage({this.param}); @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("搜索页")),
body: Text("接受到的传参的值为:${param != null ? param["id"] : 0}"),
);
}
}

Flutter中的普通路由与命名路由(Navigator组件)的更多相关文章

  1. 关于使用vue-router的嵌套路由的命名路由时踩的坑

    今天在做我的模仿微博项目时,我想实现点击router-link后,跳转到微博正文页面,并渲染其嵌套视图-评论组件.但是在实际实现时,我发现页面可以正常跳转,但是在页面加载后,并不渲染该页面的嵌套视图, ...

  2. flutter中的命名路由

    命名路由是区别于基本路由的一种存在,方便于大型项目中路由的统一管理,现在,在前面基本路由的项目基础上实现实现命名路由. 使用步骤 路由配置 命名路由在使用前,需要在根组件main.dart中进行简单的 ...

  3. flutter中的路由跳转

    在前面的基本路由和命名路由中,都演示了如何进行路由跳转,并且在路由跳转以后,可以借用系统自带的按钮就行返回上一级,当然了,也可以自定义按钮返回上一级. 返回上一级 在前面的例子中,当从Home.dar ...

  4. Flutter入门(三)-底部导航+路由

    * StatefulWidget 如果想改变页面中的数据就要用到StatefulWidget,之前自定义组件继承的StatelessWidget是不能动态修改页面数据的 //自定义有状态组件 clas ...

  5. flutter页面间跳转和传参-Navigator的使用

    flutter页面间跳转和传参-Navigator的使用 概述 flutter中的默认导航分成两种,一种是命名的路由,一种是构建路由. 命名路由 这种路由需要一开始现在创建App的时候定义 new M ...

  6. Flutter中管理路由栈的方法和应用

    原文地址:https://www.jianshu.com/p/5df089d360e4 本文首先讲的Flutter中的路由,然后主要讲下Flutter中栈管理的几种方法. 了解下Route和Navig ...

  7. Flutter 中的路由

    Flutter 中的路由通俗的讲就是页面跳转.在 Flutter 中通过 Navigator 组件管理路由导航. 并提供了管理堆栈的方法.如:Navigator.push 和 Navigator.po ...

  8. Flutter 中的基本路由

    Flutter 中的路由通俗的讲就是页面跳转.在 Flutter 中通过 Navigator 组件管理路由导航,并提供了管理堆栈的方法.如:Navigator.push 和 Navigator.pop ...

  9. tornado中命名路由及反向解析使用

    一. 命名路由: 通常路由写法为[ (r'/' , Handler), ... ] 以上路由写法无法实现命名, 使用命名路由需借助tornado提供的方法, 如下: [ tornado.web.url ...

随机推荐

  1. (十二)class文件结构:魔数和版本

    一.java体系结构 二.class格式文件概述 class文件是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积 ...

  2. iOS-NSURLConnection异步发送 HTTP请求

    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { NSString *new = [searchBar.text stri ...

  3. 网络损伤仪细分市场:eCPRI网络损伤的技术要求

    关于“网络损伤仪”的叫法 网络损伤仪,也称作为广域网仿真仪,广域网损伤仪,WAN Emulation,Network Impairment Emulator. 为什么会带WAN广域网这个限定词? 应该 ...

  4. 如何使用CLI命令行部署VMware VCSA 6.5

    在本文中,我们讨论如何使用CLI部署VMware vCSA 6.5,vCSA 6.0提供了两种实现类型,向导和脚本化.我们将使用一个名为vcsa-deploy的实用程序进行CLI安装.同样vcsa-d ...

  5. 2、head 标签学习

     5秒自动刷新 <meta http-equiv="refresh" content="5,url:http://www.baidu.com" /> ...

  6. MapReduce的shuffle过程详解

    [学习笔记] 结果分析:shuffle的英文是洗牌,混洗的意思,洗牌就是越乱越好的意思.当在集群的情况下是这样的,假如有三个map节点和三个reduce节点,一号reduce节点的数据会来自于三个ma ...

  7. Word 删除脚注尾注前边的编号

    1. 前言 一般我们插入尾注都是有编号的,怎么插入无编号的尾注? 2. 步骤 进入引用选项卡,然后注意不要点插入脚注,而要点脚注最右下方的小方框,出现脚注和尾注的对话框,点符号(Y)...,选第一个格 ...

  8. LC 33. Search in Rotated Sorted Array

    问题描述 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ...

  9. python学习-48 模块2

    sys修改环境变量 ---------- 只能临时修改 import syssys.path.append() 例如: import sys sys.path.append('C:\Users\hua ...

  10. python笔记005-字符串-列表-元组

    目录 1 上次作业补充拓展... 1 1.1 进制转换... 1 1.2 类型判断... 1 2 今日学习内容... 2 2.1 格式化输出... 2 2.2 基本运算符... 2 2.2.1 算术运 ...