Flutter 之 dio 请求HTTP
2019-07-19 本文已影响0人
kindom_0129
简单说明flutter使用Dio包发送请求
1.添加依赖
dependencies:
dio: ^2.0.11 #latest version
2.导入dio
import 'package:dio/dio.dart';
3.设置options
//默认为post请求
_option = Options(method: 'post');
//连接超时时间(毫秒)
_option.connectTimeout = 10000;
//接收超时时间(毫秒)
_option.receiveTimeout = 10000;
//设置httpHeader
_option.headers.addAll(new Map<String, dynamic>.from(headers));
4.发送请求
Dio dio = Dio();
dio.options.baseUrl = dataSource.baseURL;
Response response = await dio.post(path,
data: parameters, queryParameters: parameters, options: _option);
if (response.statusCode == 200) {
debugPrint('请求参数: ${response.request.queryParameters}');
debugPrint(
'-------------------请求成功,请求结果如下:----------------- \n===请求url: ${response.request.uri.toString()} \n===请求 头: \n${_option.headers} \n===请求结果: \n${response.data}\n');
debugPrint('-------------------请求成功 ----------------');
} else {
debugPrint('-------------------请求失败-------------------');
}
注意1
1.请求带有参数parameters时发现:使用dio.post()函数,设置data值为parameters时,实际请求中的response.request.queryParameters为空,导致后台接收不到参数,需设置queryParameters:parameters,后台才能接收到;
2.baselURL:baseUrl都是在dio.option.baseUrl设置的;
注意3.dio.options.method设置是无效:
Dio dio = Dio();
dio.options.method = 'post'; //无效
解决办法:
//新建一个Options对象,然后在发起请求的时候进行设置:
Options option = Options(method:'post');
Response response = await dio.request(path,data:{"data": "data"}, options: option);
2019-08-05补充:
设置queryParameters是get请求,如果post失败可以考虑是否是httpheader的内容不符,本人就碰到 Content-Type的问题,默认 Content-Type为ContentType.json需要根据自己修改:
import 'dart:io';
options.contentType = ContentType.parse("application/x-www-form-urlencoded");