簡體   English   中英

如何在 flutter 中使用 navigatorKey 傳遞值下一個屏幕?

[英]How to pass value next screen using navigatorKey in flutter?

我正在使用 bloc state 管理。 並使用NavigatorState導航屏幕,但現在需要將值傳遞到下一個屏幕,但在這里,不知道如何使用 NavigatorState 將值傳遞到屏幕。

class AppView extends StatefulWidget {
  @override
  _AppViewState createState() => _AppViewState();
}

class _AppViewState extends State<AppView> {
  final _navigatorKey = GlobalKey<NavigatorState>();

  NavigatorState get _navigator => _navigatorKey.currentState;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: theme,
      navigatorKey: _navigatorKey,
      builder: (context, child) {
        return BlocListener<AuthenticationBloc, AuthenticationState>(
          listener: (context, state) {

            switch (state.status) {
              case AuthenticationStatus.authenticated:
                _navigator.pushAndRemoveUntil<void>(
                  Home.route(),
                  (route) => false,
                );
                   

                  // Navigator.of(context).pushAndRemoveUntil(
                  //   MaterialPageRoute(builder: (context)=> 
                  //    Home( currentUser:state.user)), (route) => false);
                
                 
              
                break;
              case AuthenticationStatus.unauthenticated:
                _navigator.pushAndRemoveUntil<void>(
                AuthPage.route(), //LoginPage
                  (route) => false,
                  
                );
                break;

                 case AuthenticationStatus.unknown:
                _navigator.pushAndRemoveUntil<void>(
                  SplashPage.route(),
                  (route) => false,
                );
                break;
              default:
                break;
            }
          },
          child: child,
        );
      },
      onGenerateRoute: (_) => SplashPage.route(),
    );
  }
}

上面注釋的代碼不起作用,出現異常

Unhandled Exception: Navigator operation requested with a context that does not include a Navigator.

試試_navigator.currentState.pushAndRemoveUntil

我通過替換這個找到了解決方案:

 _navigator.pushAndRemoveUntil<void>(
                  Home.route(),
                  (route) => false,
                );

有了這個:

  _navigator.pushAndRemoveUntil( MaterialPageRoute(builder: (context)=> 
                     Home( currentUser:state.user)), (route) => false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM