SuperAPI AI 工具集

bloc-cubit

编程与开发

查看项目

更新于 10-15 19:56

技能介绍

用途:在 Flutter 项目中使用 bloc 与 flutter_bloc 进行状态管理时参考,核心是区分简单直接的状态更新与事件驱动流程。

主要能力与选择:简单、直接的状态更新用 Cubit;需要显式事件、加载/成功/失败转换或可回放业务逻辑时用 Bloc。仅 Dart 项目用 bloc;Flutter 应用需要 BlocProvider、BlocBuilder、BlocListener 等组件时用 flutter_bloc,它会传递依赖 bloc,无需单独再添加 bloc。

实现结构:repository 或 service 负责 I/O,bloc/cubit 负责状态与编排,UI 只派发动作并渲染状态;状态保持不可变,使用 Bloc 时事件保持显式,一个功能职责对应一个 bloc 或 cubit。

生命周期:手动创建的 bloc/cubit 必须调用 close() 关闭;由 BlocProvider 管理的实例不要手动关闭,应使用 BlocProvider 或 MultiBlocProvider 交给 Flutter 处理销毁。

UI 绑定:需要因状态重建用 BlocBuilder,只做副作用而不重建用 BlocListener,两者都需要用 BlocConsumer;需要收窄重建或监听范围用 buildWhen 和 listenWhen,只让单个字段驱动重建可用 BlocSelector。

测试:Cubit 通过调用方法并断言发出的状态;Bloc 通过添加事件并断言转换序列;在边界处 mock repository,副作用与渲染逻辑分开测试。

限制与常见问题:不要把网络调用直接放进 widget,不要用 Bloc 处理琐碎的本地状态,Flutter 应用只需 flutter_bloc 时不要同时添加 bloc,手动管理实例不要忘记 close(),不要发出无意义的重复状态,也不要让单个 bloc 演变成全应用的状态堆积场。资料未提供具体版本要求、安装命令或完整代码示例。