使用BLoC时如何组织抖动导航

时间:2020-07-28 07:20:53

标签: flutter bloc flutter-navigation flutter-bloc

我试图弄清楚如何使用块模式进行导航,但是我缺少了一些东西。例如,请参见文档页面上的授权模板,以获取该块: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消失了。 我如何回到第二步而不必回到弹出窗口,而是在第二步页面上使用授权块和注销按钮

0 个答案:

没有答案