有没有办法在Flutter中收听导航器的路线变化?基本上,我希望在推送或弹出路线时收到通知,并在屏幕上显示当前路线从通知中返回
答案 0 :(得分:2)
在导航观察员的基础上,您还可以使用RouteObserver和RouteAware。
答案 1 :(得分:0)
导航器有observers。您可以实施NavigatorObserver并接收包含详细信息的通知。
答案 2 :(得分:0)
我也在为此而苦苦挣扎,出于我的目的,RouteObservers
感到矫kill过正,在我需要的地方太多了。我最近处理它的方法是在onGenerateRoute
中使用MaterialApp
属性。因此,如果您在您的应用中使用onGenerateRoute
,则此解决方案更适用(如果使用参数导航,则可能特别有用)。您可以详细了解here。
我的MaterialApp
如下所示:
runApp(MaterialApp(
title: 'bla',
home: BuilderPage(LoginArguments(false)),
onGenerateRoute: generateRoute
));
generateRoute
方法如下所示:
Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case 'main':
print('Navigated to main')
return MaterialPageRoute(builder: (_) => MainScreen());
case 'register':
print('Navigated to register')
return MaterialPageRoute(builder: (_) => RegisterScreen());
default:
return MaterialPageRoute(
builder: (_) => Scaffold(
body: Center(
child: Text('No route defined for ${settings.name}')),
));
}
}
所以每次我现在都举个例子:
Navigator.pushNamed(
context,
'register',
);
它将打印Navigated to register
。我认为,如果您不必知道自己是pushed
还是popped
,这种方法特别有用。通过其他一些实现,也可以通过注入参数来观察到这一点。