用途:在 Flutter 项目中以函数式方式处理仓库层错误,用 Either/Failure 模式替代异常传播,使 UI 与 BLoC 不直接接触异常。
主要能力与工作流:定义失败类型,使用 @freezed 联合创建领域专属 Failure(如 UnauthorizedFailure、OutOfStockFailure);仓库返回 Either<Failure, T>,UI/BLoC 中不出现异常;仅在基础设施层捕获异常(如 DioException)并返回 Left(Failure),绝不向 UI 重新抛出;在 BLoC 中使用 .fold(failure, success) 发出对应状态,移除 BLoC 中的 try/catch;用 failure.failureMessage(返回 TRObject 或本地化字符串)提供 UI 安全文本;使用低基数消息模板记录日志,变量数据通过 metadata/context 传递。
约束与反模式:禁止静默捕获,不得在无日志或未记录重试的情况下吞掉错误;UI/BLoC 的 catch 块必须通过 AppLogger.error(AppException.fromException(e).message, error: e, stackTrace: st) 路由错误,以保证可观测性与类型安全的 UI 消息;BLoC 中不得使用 try-catch;不得使用纯字符串失败(如 Left('Something went wrong')),应定义类型化 @freezed Failure 子类;不得有空 catch 块;仓库不得抛出状态异常,应返回 Left(Failure);不得缺少日志注册。
参考:Failure 定义与 API 错误映射见 references/REFERENCE.md;相关主题为 layer-based-clean-architecture 与 bloc-state-management。
限制:资料未提供具体安装命令、平台支持范围、收费信息或完整代码示例,相关细节暂未提供。