最近开始做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或许他的方式更好吧