Flutter集成子应用时导航与全局Bloc状态管理冲突的问题求助
Flutter集成子应用时导航与全局Bloc状态管理冲突的问题求助
大家好,想请教个Flutter集成子应用时遇到的棘手问题:
我们公司原本有两个独立的Flutter应用A和B,现在需求是把B作为子应用嵌入到A里,让两者合并成一个完整的App。但麻烦的是,这两个应用原本是独立开发的,代码和设计模式都不统一。
我最先尝试的方案是把B打包成一个组件包,在A里直接调用打开它。但马上遇到了导航问题:
用户进入B的子应用后,跳转到某个内部页面,再按返回键时,不是回到B里的上一个页面,而是直接退出整个子应用回到A的根页面。
为了解决这个问题,我尝试在子应用B的根节点用PopScope包裹MaterialApp,重写返回逻辑,简化后的代码如下:
return PopScope( canPop: false, onPopInvokedWithResult: (didPop, res) { if (navigatorKey.currentState?.canPop() ?? false) { navigatorKey.currentState?.pop(); } else { Navigator.of(context).pop(); // 没有更多页面时关闭整个子应用 } }, child: MaterialApp( navigatorKey: navigatorKey, title: 'Flutter Demo', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), ), home: const PackageFirstPage(), ), );
这个方法确实解决了返回直接退到A的问题,但又出现了新的bug:子应用B内部的页面无法自定义重写返回导航逻辑——AppBar上的返回按钮正常,但系统返回键完全不受页面内的自定义返回逻辑影响,只会走根节点PopScope里的逻辑。
后来我发现另一个可行的方向:如果子应用B里不创建独立的MaterialApp,而是直接用页面组件,导航就能完全正常工作,不会出现返回直接退出的问题。但这又带来了更严重的问题:
我原本在B的
MaterialApp外层包裹了全局的BlocProvider来做状态管理,去掉MaterialApp后,所有Bloc的状态都超出了作用域,整个状态管理体系直接失效。
我还试过用Navigator组件替代MaterialApp来管理导航,但效果和之前一样,根本解决不了状态管理的问题。
有没有大佬遇到过类似的场景?求指点怎么同时解决导航和全局Bloc状态管理的问题😭
内容来源于stack exchange
相关产品推荐
相关产品推荐

