Flutter

时间:2017-08-07 07:12:10

标签: dart flutter

有没有办法在Flutter中收听导航器的路线变化?基本上,我希望在推送或弹出路线时收到通知,并在屏幕上显示当前路线从通知中返回

3 个答案:

答案 0 :(得分:2)

在导航观察员的基础上,您还可以使用RouteObserverRouteAware

答案 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,这种方法特别有用。通过其他一些实现,也可以通过注入参数来观察到这一点。