首先看源码,里面有这么几种跳转方式
1页面正常跳转
该路由名称需要在程序主入口中进行定义。定义方法为:
routes: <String, WidgetBuilder> {
‘/page1’: (BuildContext context) => new Page1(),
‘/page2’ : (BuildContext context) => new Page2(),
‘/page3’ : (BuildContext context) => new Page3(),
‘/page4’ : (BuildContext context) => new Page4(),
},
直接跳转
Navigator.pushNamed(context, “/page2”);
还有一个方法
Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
return Page2();
}));
这里就可以考虑带参数了
不带参数
Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
return new SecondPage());
}))
带参数
Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
return new SecondPage("携带参数"));
}))
页面关闭
Navigator.pop(context);
2跳转后关闭当前页面
Navigator.pushReplacementNamed(context, “/page2”);
同样的还有另一个可传参数的
Navigator.pushReplacement(context, new MaterialPageRoute(builder: (BuildContext context){
return Page2();
}));
下面这个方法类似
popAndPushNamed——Navigator.popAndPushNamed(context, ‘/screen4’);
3页面跳转,被跳转页面返回时回传参数
Navigator.push(context, page).then((data){
setState(() {
if(data==1){
print(“收到返回值了了”);
}
});
});
这里data就是返回的值
另一个界面关闭时这样写:
Navigator.pop(context,1);
就把1回传过去了,是不是很方便呀,比起原生安卓真是不要太爽
4 跳转到某界面,然后关闭之前所有的界面
Navigator.of(context).pushNamedAndRemoveUntil(’/page3’, (Route route) =>false);
常用于登录界面,假如token失效,跳转到登录界面并清空之前界面可用此方法。
注意第二个参数要为false才会关闭之前页面,true则不关。
flutter为我们提供了方便的配置参数,灵活
5需要关闭某范围内的界面
1–>2–>3,3到4时使用Navigator.pushNamedAndRemoveUntil(context,"/page4",ModalRoute.withName(’/page1’));
在4返回时,直接关闭掉了应用
用这个方法时
Navigator.pushNamedAndRemoveUntil(context,"/page4",ModalRoute.withName(’/’));
回到了page1
用这个方法时
Navigator.pushNamedAndRemoveUntil(context,"/page4",ModalRoute.withName(’/page2’));
回到了page2
后面参数是page3返回到page3
page4 返回就关闭了应用
得出 :只要第二个参数不是栈顶和自己本身都是可以用来 关闭page4到 page*之间的界面的
Navigator.pushAndRemoveUntil与上同理,不用传routName,直接传page
以上over