从前往后传值
假设从 A 页面跳到 B 页面, 将信息从A 传到B,
通过Navigation.push
B中有个name
字段,
const TwoWidget({Key key, this.name}) : super(key: key);
声明的时候将信息 添加进去,
通过
Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
TwoWidget widget = TwoWidget(name: "祝化林",);
return widget;
}));
将信息传到B界面
从后往前传值
静态路由从后往前传值
静态路由不能从前向后传值,只能从前往后,需要两步,首先注册,在routes
中注册路由,
假设,从A 跳转到B,从B 返回A的时候进行传值,
MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter实例'),
routes: <String, WidgetBuilder> {
// 这里可以定义静态路由,不能传递参数
'/router/second': (_) => new SecondPage(),
'/router/home': (_) => new RouterHomePage(),
},
);
在 action
事件中调用路由, 传的值在 then
后面,是个 Future
,这边通过一个弹框,将结果显示出来,
Navigator.pushNamed(context, 'twoWidget').then((name) {
show(context, name);
});
在B中pop回去的时候, pop
后面即为传的值.
Navigator.of(context).pop('***');
动态路由从后往前传值
场景同静态路由一样,
在从A跳转到B的时候,使用 then
,接收B中传来的值,B中传值方法不变
Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
TwoWidget widget = TwoWidget();
return widget;
})).then((name){
show(context, name);
});
show
为显示一个弹框
show(BuildContext context,String name){
showDialog(
context: context,
builder: (BuildContext context){
return new SimpleDialog(
title: Text(name),
children: <Widget>[
new SimpleDialogOption(
child: new Text('确定'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}