Flutter

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");
上一篇 下一篇

猜你喜欢

热点阅读