我一直在使用<app-someKindOfComponent>
<app-directive [first]="'first 1'" [second]="'second 1'">A</app-directive>
<app-directive [first]="'First 2'" [second]="'second 2'">B</app-directive>
<app-directive [first]="'First 3'" [second]="'second 3'">C</app-directive>
</app-someKindOfComponent>`
并将数据轻松传回1屏幕。但是,如果我使用Navigator.pop
,将对象传递回目标屏幕的可接受方法是什么?
答案 0 :(得分:0)
没有。这也没有意义,因为应该将结果返回给推动该路线的路线。
如果确实需要执行此操作,请使用多个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
答案 1 :(得分:0)
您可以使用arguments
中的RouteSettings
将数据传递回特定的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;
}
});
请注意:您必须初始化arguments
,否则它将为null,这就是(1)的目的
答案 2 :(得分:0)
有点不正统,但我个人使用共享首选项,并在完成后清除