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

关于Bloc使用的疑问:是否应为每个待办事项创建独立Bloc实例?

是否应该创建同一个Bloc的多个实例?

针对你的待办事项列表场景,两种方案都有适用场景,具体看业务需求:

每个TodoItem单独使用TodoBloc实例(你的当前写法)

这种方案完全可行,适合以下情况:

  • 每个待办项的状态完全独立,比如单独处理单个todo的编辑状态、加载状态(修改单个todo的完成状态、加载详情),不需要和其他待办项共享状态
  • 每个TodoBloc只负责对应todo的业务逻辑,代码逻辑更聚焦,避免单个Bloc因管理所有todo而臃肿复杂
  • 你的代码写法是正确的:通过BlocProvider为每个TodoItem子树提供独立的TodoBloc实例,TodoItem可以在内部直接获取自己对应的Bloc处理业务

你的代码示例:

todos.map((e) {
  return Padding(
    padding: const EdgeInsets.only(bottom: 8.0),
    child: BlocProvider(
      create: (context) => TodoBloc(),
      child: TodoItem(todo: e),
    ),
  );
}).toList(),

所有待办项放在同一个Bloc中(比如TodosBloc)

如果业务涉及跨待办项的状态联动或全局操作,更适合用这种方案,比如:

  • 需要批量操作:全选、批量删除、批量修改完成状态
  • 需要统计全局数据:已完成待办项数量、总待办数
  • 需要全局过滤:只显示已完成/未完成的待办项
  • 待办项之间有状态依赖:某个todo的状态变化会影响其他todo的展示

这种情况下,统一的TodosBloc会在状态中维护整个todo列表,通过不同事件区分操作类型(比如UpdateTodoEvent、DeleteTodoEvent、ToggleAllTodoEvent),逻辑更集中,也避免了多个Bloc之间的状态同步问题。

总结建议

  • 若只是单个todo的独立操作,优先用单个TodoBloc实例的方案,代码更清晰易维护
  • 若涉及全局列表层面的操作,选择统一的TodosBloc方案,避免状态分散带来的同步问题

内容的提问来源于stack exchange,提问作者Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:22:10