我正在使用 BLoC,我需要从 PageOne 导航到 PageTwo 并能够使用后退按钮返回,我不知道这是否是处理此问题的正确方法。调用函数_navigateToPage2时,我也会收到错误消息。
用于从 Navigator 推送或弹出路由的上下文必须是作为 Navigator 小部件后代的小部件的上下文。
class SimpleBlocDelegate extends BlocDelegate {
@override
void onTransition(Transition transition) {
print(transition);
}
@override
void onError(Object error, StackTrace stacktrace) {
print(error);
}
}
void main() {
BlocSupervisor().delegate = SimpleBlocDelegate();
runApp(MyApp(userRepository: UserRepository(GuriApi())));
}
class MyApp extends StatefulWidget {
final UserRepository userRepository;
MyApp({Key key, @required this.userRepository}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
AuthenticationBloc _authenticationBloc;
UserRepository get _userRepository => widget.userRepository;
@override
void initState() {
_authenticationBloc = AuthenticationBloc(userRepository: _userRepository);
_authenticationBloc.dispatch(AppStarted());
super.initState();
}
@override
void dispose() {
_authenticationBloc.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BlocProvider<AuthenticationBloc>(
bloc: _authenticationBloc,
child: MaterialApp(
theme: new ThemeData(
fontFamily: 'Monserrat',
primaryColor: Colors.lightBlue[50],
accentColor: Colors.white),
home: BlocBuilder<AuthenticationEvent, AuthenticationState>(
bloc: _authenticationBloc,
builder: (BuildContext context, AuthenticationState state) {
if (state is AuthenticationUninitialized) {
return SplashPage();
}
if (state is AuthenticationAuthenticated) {
return Home(userRepository: _userRepository);
}
if (state is AuthenticationUnauthenticated) {
return LoginPage(userRepository: _userRepository);
}
if (state is AuthenticationLoading) {
return LoadingIndicator();
}
if (state is PageOneSelected) {
return PageOne();
}
if (state is PageTwoSelected) {
_navigateToPage2();
}
},
),
),
);
}
_navigateToPage2() {
Navigator.of(context).push<bool>(
MaterialPageRoute(
builder: (BuildContext context) =>
PageTwo(userRepository: _userRepository)));
}
}