如何在 flutter 中使用 navigatorKey 传递下一个屏幕的值?
How to pass value next screen using navigatorKey in flutter?
我正在使用 bloc 状态管理。
并使用 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);
我正在使用 bloc 状态管理。
并使用 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);