Jos*_*ane 5 navigator dart flutter
我一直在使用Navigator.pop并轻松地将数据传递回1屏幕。但是,如果使用Navigator.popUntil,将对象传递回目标屏幕的可接受方法是什么?
hun*_*ghd 13
您可以使用argumentsinRouteSettings将数据传回特定的Route.
例如:
// in MaterialApp
MaterialApp(
onGenerateRoute: (settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(
settings: RouteSettings(name: '/', arguments: Map()), // (1)
builder: (_) => HomePage()
);
}
}
)
// in HomePage
Navigator.of(context).push(MaterialPageRoute(builder: (_) => StuffPage())
.then(_) {
final arguments = ModalRoute.of(context).settings.arguments as Map;
final result = arguments['result'];
};
// in StuffPage
Navigator.of(context).popUntil((route) {
if (route.settings.name == '/') {
(route.settings.arguments as Map)['result'] = 'something';
return true;
} else {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
请注意:您必须初始化arguments,否则它将为空,这就是(1)的目的
空无一人。这也没有意义,因为结果应该返回给推送该路由的路由。
如果您确实必须这样做,请使用多个pop调用:
// Widget of Route A:
String resultOfC = await Navigator.push(context, routeB);
// Widget of Route B:
String resultOfC = await Navigator.push<String>(context, routeC);
Navigator.pop(context, resultOfC); // pass result of C to A
// Widget of Route C:
Navigator.pop(context, 'my result'); // pass result to B
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |