![196](https://img-blog.csdnimg.cn/img_convert/fdccccc8ebf96f19738be7aa256c826e.png)
问题点
- 请求后返回的数据类型是什么?
- json.decode() 接收json字符串,返回数据都要进行toString()吗?
- 接收到返回数据不序列化应该怎么取数值?
Dio
https://github.com/flutterchina/dio/blob/master/README-ZH.md
在dio的请求配置中responseType
ResponseType responseType;
// [responseType] 表示期望以那种格式(方式)接受响应数据。
// 目前 [ResponseType] 接受三种类型 `JSON`, `STREAM`, `PLAIN`.
//
// 默认值是 `JSON`, 当响应头中content-type为"application/json"时,dio 会自动将响应内容转化为json对象。
// 如果想以二进制方式接受响应数据,如下载一个二进制文件,那么可以使用 `STREAM`.
//
// 如果想以文本(字符串)格式接收响应数据,请使用 `PLAIN`.
响应数据
{
/// 响应数据,可能已经被转换了类型, 详情请参考Options中的[ResponseType].
T data;
/// 响应头
Headers headers;
/// 本次请求信息
Options request;
/// Http status code.
int statusCode;
/// 是否重定向(Flutter Web不可用)
bool isRedirect;
/// 重定向信息(Flutter Web不可用)
List<RedirectInfo> redirects ;
/// 真正请求的url(重定向最终的uri)
Uri realUri;
/// 响应对象的自定义字段(可以在拦截器中设置它),调用方可以在`then`中获取.
Map<String, dynamic> extra;
}
响应数据
https://www.fastmock.site
fastmock是一款类似于easymock的工具,可生成模拟接口
![302](https://img-blog.csdnimg.cn/img_convert/7ef1ceb989ba0df44560bfd88028210c.png)
接口传入name,返回
{
"result": {
"name": "test"
}
}
app 效果
![303](https://img-blog.csdnimg.cn/img_convert/c95e9371f73090a5b9b7b8347a88c0b4.png)
Future getHttp(String inputText) async {
try {
Response response;
var data = {'name': inputText};
response = await Dio().get(
"接口略",
queryParameters: data
);
print('===========获取请求的response data');
print(response.data);
print(response.data is Map); // true
print('===========获取请求的response.data["result"]');
print(response.data['result']);
print(response.data['result'] is Map); // true
return response.data['result'];
} catch (e) {
print('==============$e');
}
}
![304](https://img-blog.csdnimg.cn/img_convert/5ebb0780fff0e2f08ebcf4ddc9292cff.png)
由此可知
若dio responseType默认JSON,接收到的返回数据类型为Map
获取数据时要
response.data['result']['name']
序列化
[key][key][key]...
这样取值是不是有点恶心,可将dio的responseType变更为PLAIN,然后获取到string数据序列化成对象
Json_model包
https://github.com/flutterchina/json_model/blob/master/README-ZH.md
- 在工程根目录下创建一个名为 “jsons” 的目录;
- 创建或拷贝Json文件到"jsons" 目录中 ;
- 运行
pub run json_model
(Dart VM工程)or flutter packages pub run json_model
(Flutter中) 命令生成Dart model类,生成的文件默认在"lib/models"目录下
直接生成model
https://javiercbk.github.io/json_to_dart/
该网站会根据json数据生成model
![305](https://img-blog.csdnimg.cn/img_convert/e2f2c6d0c92082eb2771faad718887a4.png)
json_serializable
https://book.flutterchina.club/chapter11/json_model.html
关注公众号: 页面仔小杨 【实战干货、原创分享】