基本路由
在Flutter中路由跳转是通过Navigator这个类进行操作的,它是一种堆栈的结构,主要有两个操作一个是push就是入栈操作,他会把当前页面放入栈顶并显示。还有一个就是pop,它会把当前页面进行出栈操作,并显示操作之后最上层的页面。
使用的时候我们需要先将需要跳转的页面文件进行导入,然后使用Navigator.push(context,MaterialPageRoute()),进行跳转。
1 | RaisedButton( |
当pop的时候
1 | RaisedButton( |
当然Navigator.of(context).push(xxx),Navigator.of(context).pop(xxx)也可以直接使用Navigator.push(context,xxx)或者Navigator.pop(context),其实原理都差不多只是后者封装了前者。
1 |
|
基本路由传参
基本路由传参其实就是在需要传参的页面中的构造器加入需要传参的字段,然后通过构造器中的相应参数去传参。
1 | Navigator.push(context, MaterialPageRoute(builder: (context){ |
构造器
1 | class MyParam extends StatelessWidget { |
当我们需要返回数据的时候(pop操作)
我们可以使用pop里面的result参数
1 |
|
注意我们push方法返回的是一个Future,我们可以直接使用.then方法接受参数
1 | Navigator.push<String>(context, new MaterialPageRoute(builder: (BuildContext context){ |
命名路由
命名路由有点类似于Vue中的路由,我们需要将使用到的路由注册到MaterialApp中的routes参数中,这个routes参数是一个map
1 | class MyApp extends StatelessWidget { |
initalRoute就是初始路由。
然后我们就可以使用Navigator.pushNamed(context,routeName)这个方法进行跳转页面了。
命名路由传参
命名路由传参主要借助于MaterialApp的onGeneratorRoute属性,这里面接受一个RouteFactory,其实返回的就是Route。
我们首先要删除routes属性(必须要,不然无法使用)。然后我们自己定义一个route的map。
1 | class MyApp extends StatelessWidget { |
当然,我们的Navigator也需要变动
1 | //路由跳转 |
这里我们需要增加argument参数(这是原本方法自带的参数)