You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:54:55