Flutter封装网络请求

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011272795/article/details/82765544

dio

dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等…

我们的网络请求就是在dio的基础上封装的 . 所以要引入dio包.

添加依赖

dependencies:
  dio: ^x.x.x  // 请使用pub上的最新版本

HttpUtil

 /*
 * Created by 李卓原 on 2018/9/15.
 * email: [email protected]
 * 网络请求封装
 */

import 'package:dio/dio.dart';

class HttpUtil {
  static HttpUtil instance;
  Dio dio;
  Options options;

  static HttpUtil getInstance() {
    print('getInstance');
    if (instance == null) {
      instance = new HttpUtil();
    }
    return instance;
  }

  HttpUtil() {
    print('dio赋值');
    // 或者通过传递一个 `options`来创建dio实例
    options = Options(
      // 请求基地址,可以包含子路径,如: "https://www.google.com/api/".
      baseUrl: "https://www.xx.com/api",
      //连接服务器超时时间,单位是毫秒.
      connectTimeout: 10000,

      ///  响应流上前后两次接受到数据的间隔,单位为毫秒。如果两次间隔超过[receiveTimeout],
      ///  [Dio] 将会抛出一个[DioErrorType.RECEIVE_TIMEOUT]的异常.
      ///  注意: 这并不是接收数据的总时限.
      receiveTimeout: 3000,
      headers: {},
    );
    dio = new Dio(options);
  }

  get(url, {data, options, cancelToken}) async {
    print('get请求启动! url:$url ,body: $data');
    Response response;
    try {
      response = await dio.get(
        url,
        data: data,
        cancelToken: cancelToken,
      );
      print('get请求成功!response.data:${response.data}');
    } on DioError catch (e) {
      if (CancelToken.isCancel(e)) {
        print('get请求取消! ' + e.message);
      }
      print('get请求发生错误:$e');
    }
    return response.data;
  }

  post(url, {data, options, cancelToken}) async {
    print('post请求启动! url:$url ,body: $data');
    Response response;
    try {
      response = await dio.post(
        url,
        data: data,
        cancelToken: cancelToken,
      );
      print('post请求成功!response.data:${response.data}');
    } on DioError catch (e) {
      if (CancelToken.isCancel(e)) {
        print('post请求取消! ' + e.message);
      }
      print('post请求发生错误:$e');
    }
    return response.data;
  }
}

使用

import ‘package:flutter_oschina/utils/HttpUtil.dart’;

Future getData() async {
    String url = Api.NEWS_LIST;
    var data = {'pageIndex': 1, 'pageSize': 10};
    var response = await HttpUtil().get(url, data: data);

    setState(() {
     ...
    });
  }

猜你喜欢

转载自blog.csdn.net/u011272795/article/details/82765544