fx_exception
Fx 家族统一异常追踪机制。提供 Code、Trace、FxException、TraceMixin 四个核心能力,各模块基于此扩展自己的异常体系。
核心概念
| 协议 | 职责 |
|---|---|
Code |
错误码 mixin,任何 enum 通过 with Code 接入 |
Trace |
异常信息 mixin,统一结构:code + message + error + stack |
FxException<C> |
模块异常通用基类,避免重复声明 Trace 字段 |
TraceMixin |
异常分发 mixin,支持多监听器 |
使用
import 'package:fx_exception/fx_exception.dart';
自定义错误码
enum BizCode with Code {
tokenExpired(401),
orderNotFound(10001),
;
@override
final int code;
const BizCode(this.code);
}
自定义异常
class BizException extends FxException<BizCode> {
const BizException(
super.code,
super.message, [
super.error,
super.stack,
]);
}
监听异常
// 任何 with TraceMixin 的类都可以分发异常
class MyService with TraceMixin {
void doSomething() {
// ...
notifyTrace(BizException(BizCode.tokenExpired, 'token 过期'));
}
}
final service = MyService();
service.addTraceListener((trace) {
print('${trace.code} - ${trace.message}');
});
内置
RequestErrorCode— 框架级错误码(convert / emptyData / exception)RequestException— 请求异常,fx_dio 内部使用
日志、上报和界面提示属于宿主策略,不由本包内置;使用模块可自行注册
addTraceListener。
TraceMixin 在分发时会隔离单个监听器的异常;需要记录该异常时,可重写
onTraceListenerError。