如何动态指定 dio 的返回数据模型?

新手上路,请多包涵

问题描述

在 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;
    }
    // 该如何规范泛型的返回值呢?
  }
}
阅读 2.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题