Dart 处理请求回调

41 阅读1分钟

最近开始做Flutter开发,Flutter是使用Dart语言的,跟Go一样也是一门强类型的语言

我们在做客户端开发时都会要处理接口的响应,而响应一般是这样的结构:

{
    "code": 200,
    "msg": "OK",
    "data": {
        ...
    }
}

为了避免代码重复,我们需要做一个通用的解析方法,这里使用到了泛型,类型定义如下:

class ApiResponseEntity<T> {
  late int code;
  late String message;
  late T data;

  ApiResponseEntity({
    required this.code,
    required this.message,
    required this.data,
  });

  factory ApiResponseEntity.fromJson(Map<String, dynamic> json, T Function(Map<String, dynamic>) factoryFunction) {
    var data = factoryFunction(json['data'] as Map<String, dynamic>);

    if (kDebugMode) print('ApiResponseEntity.fromJson: $data');

    return ApiResponseEntity<T>(
      code: json['code'] as int,
      message: json['msg'] as String,
      data: data,
    );
  }
}

我们把data设置为T类型,具体由使用时去定义,之后我们在fromJson之中,接受Json和T类型的fromJson构造函数,调用如下:

var response = ApiResponseEntity<UserData>.fromJson(jsonDecode(data), UserData.fromJson);

为什么想做这期文章是因为看到掘金里面有一个使用Dio框架做开发准备的老哥,但是他的解析太麻烦了,还是使用框架去生成,看不下去了,初次接触Dart和Flutter或许他的方式更好吧