欢迎来到 Perfect Error Handler,一个具有类型安全/流/Freezed功能/覆盖所有Dio异常的错误处理器
动机
try{}catch(e){} 很难使用,then((){}).catch((){}) 也让代码难以阅读和修改
- 轻松处理所有状态:初始化/加载/数据/错误
- 流式状态变化
- 状态日志
- 基于Freezed构建
- 如果可能,进行函数分离
- 基于Dio构建,因此覆盖了所有类型的异常,您也可以添加自己的异常!
与Freezed中提到的相同,实现所有这些可能需要数百行代码,并且为每个项目制作特定的错误处理器很困难
Perfect Error Handler 已实现,您只需开始发送请求!
| 之前 | 之后 |
|---|---|
![]() |
![]() |
如何使用
安装
适用于Flutter项目
flutter pub add error_handler
flutter pub add dio
适用于Dart项目
flutter pub add error_handler
flutter pub add dio
示例
import 'package:dio/dio.dart';
import 'package:error_handler/error_handler.dart';
import 'post.dart';
/// first create [Dio] api call
FutureResponse<Post> getPost() async {
final dio = Dio();
final response = await dio.get("https://jsonplaceholder.typicode.com/posts/1");
return HttpResponse(Post.fromJson(response.data), response);
}
/// wrap the api call with [safeApiCall]
void main() {
safeApiCall(getPost).listen((event) {
event.when(
idle: () {
print("init");
},
loading: () {
print("loading...");
},
data: (post, statusCode) {
print("title: ${post.title}");
},
error: (error) {
print(getErrorMessage(error));
},
);
});
}
如何使用safeApiCall
safeApiCall(() {
return getPost();
}).listen((event) {
event.whenOrNull(
data: (post, statusCode) {
print(post.title);
},
);
});
其他示例
StreamState<Post> getPostRepository(String id) =>
safeApiCall(() => getPost(id));
ResultState 可以使用其他类型定义,例如
ApiResponse, UiState

