如何避免Cubit/Bloc随弹窗关闭而自动销毁?
解决弹窗关闭时Cubit被销毁的问题
你遇到的问题根源在于使用了BlocProvider的create构造函数——它会自动接管Cubit的生命周期,当弹窗的Widget树被销毁时,就会触发Cubit的close方法。要复用页面上已有的Cubit实例且避免被弹窗销毁,只需改用BlocProvider.value构造函数,它仅负责向下提供Cubit实例,不会管理其生命周期。
修改后的代码如下:
Utility.showBottomNavigationMessage( BuildContext context, MultiBlocProvider( providers: [ BlocProvider<SubCategoryCubit>.value( value: _subCategoryCubit, ), BlocProvider.value( value: _insertFinanceCubit, ), ], child: const SubCategorySelector(), ), Languages.of(context).subCategoryTitle, );
关键说明
- 使用
BlocProvider.value后,你需要自行负责原有Cubit的生命周期管理(比如在页面的dispose方法中手动调用Cubit的close),因为该构造函数不会自动处理关闭逻辑。 - 弹窗关闭时,仅会销毁弹窗相关的Widget和
MultiBlocProvider,不会影响传入的原有Cubit实例,它会继续存在于页面的Widget树中。
内容的提问来源于stack exchange,提问作者Reza Taghizadeh
相关产品推荐
相关产品推荐

