Is there a way to broadcast data from one widget to other widgets? Similar to a BroadcastReceiver on Android or NSNotificationCenter on iOS.
Specifically, I'm trying to detect when a Navigator pops or pushes a new view. I added navigatorObservers to MaterialApp. And when a widget comes back to the foreground, I want to be able to notify it by broadcasting changes from didPush and didPop with the actual route that's in the current foreground
Navigator.push
returns a Future
that will complete when Navigator.pop
is called (and this can optionally be used to pass data back to the widget that called push
). So for example suppose your login button has this onPressed
handler:
onPressed: () async {
bool isLoggedIn = await Navigator.pushNamed(context, '/login');
if (isLoggedIn) {
// do something
}
}
When your login page calls Navigator.pop(true)
, the Future
will complete with a value of true
which will be assigned to the isLoggedIn
variable. (You'll get null
if the user uses the back button to return to the previous screen.)
This is how showDialog
works as well.