I have been using Navigator.pop
and passing data back 1 screen with ease. However, if I use Navigator.popUntil
, what is an acceptable way to pass an object back to the destination screen?
You can using arguments
in RouteSettings
to pass data back to a specific Route
.
For example:
// 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;
}
});
Note that: you have to initialize arguments
or it will be null, that's what is the purpose of (1)