我试图弄清楚如何使用块模式进行导航,但是我缺少了一些东西。例如,请参见文档页面上的授权模板,以获取该块:template
在此示例中,我们看到了如何使用全局可访问的授权块,并且在示例本身的上下文中,一切正常,但是经过一些改进,它停止了工作,并且我不知道如何解决它。 对于此应用程序,我添加了另一个带有内部块的常规页面,并在其应用栏中添加了注销按钮。
class _SecondStepPageState extends State<SecondStepPage> {
@override
Widget build(BuildContext context) {
// ignore: close_sinks
final AuthenticationBloc _authBloc =
BlocProvider.of<AuthenticationBloc>(context);
return Scaffold(
appBar: AppBar(
title: Text('SecondStepPage'),
actions: <Widget>[
// action button
IconButton(
icon: Icon(Icons.exit_to_app),
onPressed: () => {
_authBloc.add(AuthenticationLoggedOut()),
},
),
// action button
// overflow menu
],
),
body: BlocProvider<SecondStepPageBloc>(
create: (context) {
return SecondStepPageBloc()..add(StartLoading());
},
child: BlocBuilder<SecondStepPageBloc, SecondStepState>(
builder: (context, state) {
if (state is SecondStepPageUninitialized) {
return SplashPage();
}
if (state is SecondStepPageInitialized) {
return Text('project');
}
if (state is SecondStepPageLoadingFailure) {
return Text('error');
}
return Text('loading');
},
),
),
);
}
}
问题是,当您使用pushAndRemoveUntil从主页转到第二步页面时,注销按钮不起作用,但是当您进行推送时,一切崩溃。
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute<SecondStepPage>(
builder: (context) {
return BlocProvider.value(
value: BlocProvider.of<AuthenticationBloc>(context),
child: SecondStepPage(),
);
},
), (Route<dynamic> route) => false);
我注意到小部件树的工作有所不同
在主页上看起来像: link
当使用push转到SecondStep页面时: link
,并在使用pushAndRemoveUntil进行转换时: link
据我了解,授权块停止工作,因为其blocBuilder消失了。 我如何回到第二步而不必回到弹出窗口,而是在第二步页面上使用授权块和注销按钮