欢迎来到 Perfect Error Handler,一个具有类型安全/流/Freezed功能/覆盖所有Dio异常的错误处理器

动机

try{}catch(e){} 很难使用,then((){}).catch((){}) 也让代码难以阅读和修改

  • 轻松处理所有状态:初始化/加载/数据/错误
  • 流式状态变化
  • 状态日志
  • 基于Freezed构建
  • 如果可能,进行函数分离
  • 基于Dio构建,因此覆盖了所有类型的异常,您也可以添加自己的异常!

Freezed中提到的相同,实现所有这些可能需要数百行代码,并且为每个项目制作特定的错误处理器很困难

Perfect Error Handler 已实现,您只需开始发送请求!

之前 之后
before after

如何使用

安装

适用于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

鸣谢?

Freezed

GitHub

查看 Github