用途:在纯 Dart 或共享逻辑中正确使用 flowr_dart API,作为 FlowR/FlowB 共享语义的参考。不涉及 Flutter widget、provider 与 MVVM 扩展,这些由 flowr-usage 处理;若项目依赖 flowr,则隐式依赖 flowr_dart。
前置检查:遵循项目 AGENTS.md,仓库使用 fvm 执行 Flutter 与 Dart 命令,例如 fvm dart test 与 fvm flutter analyze。编辑前运行 git status --short,若存在无关未提交改动,询问是提交还是忽略。优先沿用项目现有架构。
导入:使用 package:flowr_dart/flowr_dart.dart;当公开方法直接使用 FutureOr、Stream 或 StreamSubscription 时导入 dart:async;应用代码不要导入 flowr_dart/src/...。
核心:FlowR<T> 用于方法驱动状态,FlowB<E,S> 用于事件驱动状态。FlowR<T> 继承 Cubit<T>,value 是 state 别名;FlowB 应由 add(event) 驱动,put 为受保护/测试用途。二者已通过 LoggableMx 继承日志辅助方法,并通过 mixin 提供 runCatching/skpIf/skpNull、debounce/throttle/mutex 与 autoDispose,不要在应用层重复实现。put 与 update 遵循 bloc 相等语义,值相等则不发事件;stream 不向新订阅者重放当前状态,用 value 或 state 同步读取;不添加 valueStream 覆盖;bloc 风格代码使用 close()。
日志:优先使用内置 logger、logF、logI、logW、logE、logS;需要进入错误通道时用 putError(error, stackTrace);异步 update 应 await。
控制流与调度:update 用于 FlowR 状态变更,runCatching 用于非状态或共享异步/同步工作;skpIf 与 skpNull 抛出 SkipError 以中止流程而不视为失败。debounceTag/throttleTag 仅在 slowlyMs > 0 时生效,mutexTag 独立于 slowlyMs。标签作用域限于单个实例。
状态规则:优先不可变状态,字段 final、const 构造、copyWith 与值相等;对 List、Map、Set 需新建集合后再发射,不要原地修改再 put(old)。
验证:使用 fvm dart format <paths> 格式化,运行 fvm dart test 或聚焦测试,改动共享 API 时运行 fvm dart analyze。相关细节见 references 下各文件。