Flutter中所有路由的Navigator类可用于从已经push到栈的路由中获取结果。 这可以通过等待push返回的Future来完成,也可以从then中获取返回的数据。 获取返回的数据 通过await push返回的Futu
Flutter中所有路由的Navigator类可用于从已经push到栈的路由中获取结果。 这可以通过等待push返回的Future来完成,也可以从then中获取返回的数据。
获取返回的数据
- 通过await push返回的Future完成,await必须在异步函数中完成:
Map maps = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ProductPage({"name":"Tome"}),
),
);
print(maps["name"]);
},
- 从Future的then中获取
context,
MaterialPageRoute(
builder: (context) => ProductPage({"name": "Tome"}),
),
).then((value) => {print(value["email"])});
向前返回数据
Navigator.pop(context, {"name": "Tom", "email": "tom@a3.com"});跳转界面传参
Navigator.push(context,
MaterialPageRoute(
builder: (context) => ProductPage({"name": "Tome"}),
),
)
完整例子
import 'package:flutter/material.dart';void main() => runApp(new MaterialApp(
title: '导航演示1',
home: new MyAppHome(),
));
class MyAppHome extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('导航页面'),
),
body: new Center(
child: RaisedButton(
child: Text("查看商品"),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ProductPage({"name": "Tome"}),
),
).then((value) => {print(value["email"])});
},
// onPressed: () async{
// Map maps = await Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => ProductPage({"name":"Tome"}),
// ),
// );
// print(maps["name"]);
// },
),
),
);
}
}
class ProductPage extends StatelessWidget {
// 接受参数
final Map<String, dynamic> maps;
// 接受参数
ProductPage(this.maps);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("商品详情"),
),
body: Center(
child: RaisedButton(
child: Text("返回"),
onPressed: () {
print(maps["name"]);
Navigator.pop(context, {"name": "Tom", "email": "tom@a3.com"});
},
),
),
);
}
}