问题描述
在 Flutter 中使用网络进行数据交互,该如何让 dio 获取的数据以指定的数据模型返回?
例如,所有的响应均是 application/json
类型,并且满足下面的模型:
- 字段
code
,是一个0-1000之间的数字; - 字段
message
是一个可能为空 (null) 的带有提示信息的字符串; - 字段
timestamp
是以秒为单位的当前时间的时间戳; - 字段
data
是一个可能为空的任意类型的数据。
我将这个模型设置为如下的代码:
class ResponseModel<T> {
late final int code;
late final int timestamp;
late final String? message;
late final T? data;
}
使用 dio
获取出来的数据类型都是 _InternalLinkedHashMap
,并且无法通过指定方法返回值的方式进行转换
Future<Response<ResponseModel>> request() {
// 使用 dio 访问网络数据并返回
}
那么在这种情况下我该怎么样将 dio 请求到的数据转换为以 ResponseModel
为模型的数据类呢?
自己尝试过哪些方法
在查阅资料的过程中发现可以使用自定义名称的构造函数来将返回值转换为这个类型,但是因为这个类型有泛型的缘故,因此无法规范泛型的转换法则。
相关代码
class ResponseModel<T> {
/*
一些字段定义,同上
*/
ResponseModel.fromJson(Map<String, dynamic> json) {
code = json['code'] as int;
timestamp = json['timestamp'] as int;
if (null != json['message']) {
message = json['message'] as String;
}
// 该如何规范泛型的返回值呢?
}
}