Flutter跨平台移动端开发丨封装网络请求框架 dio

dio 框架介绍

A powerful Http client for Dart, which supports Interceptors, Global configuration, FormData, Request Cancellation, File downloading, Timeout etc

基于 Dart 语言编写的强大的网络请求框架,支持拦截器,全局配置,FormData,请求取消,文件下载,超时监听等

Github Dio 主页


dio 项目应用

首先在 pubspec.yaml 文件中添加 dio 库依赖并 Packages get

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  dio: ^2.1.5

然后封装基于 dio 框架的 http 请求工具类

import 'package:dio/dio.dart';

/**
 * @des Dio 网络请求框架工具类
 * @author liyongli 20190523
 * */
class DioHttpUtils{

  // 服务器接口地址公有部分
  final _httpBaseUrl = "https://www.xxx...";

  // 请求超时时长
  final _httpConnectTimeout = 10000;

  // 接收超时时长
  final _hpptReceiveTimeout = 10000;

  // 本类实例
  static DioHttpUtils _dioHttpUtilsObject;

  // 请求实例
  static Dio _dioObject;

  // 参数实例
  static BaseOptions _baseOptionsObject;

   /// 单例访问
  static DioHttpUtils getInstance(){
    if(null == _dioHttpUtilsObject){
      _dioHttpUtilsObject = new DioHttpUtils._();
    }
    return _dioHttpUtilsObject;
  }

  /// 私有化构造(单例模式)
  DioHttpUtils._(){

    // 初始化 http 基本设置
    _baseOptionsObject =new BaseOptions(
        baseUrl: _httpBaseUrl,
        connectTimeout: _httpConnectTimeout,
        receiveTimeout: _hpptReceiveTimeout,
        headers: {}
    );

    // 定义请求实例
    _dioObject = new Dio(_baseOptionsObject);

    // 添加请求事件监听
    _dioObject.interceptors.add(InterceptorsWrapper(

      // 拦截请求发送事件(如添加 token、versionCode、platformType 等)
      onRequest: (RequestOptions options){
        // do something
        return options;
      },

      // 拦截请求响应事件(如数据重组,便于业务代码中快速处理调用)
      onResponse: (Response response){
        // do something
        return response;
      },

      // 拦截请求失败事件(如添加统一的错误提示 或 统一的错误处理逻辑等)
      onError: (DioError error){
        return error;
      }

    ));
  }

  /// get 请求
  get(url,{ options, cancelToken, parameters=null}) async {
    Response response;
    try{
      response = await _dioObject.get(url, queryParameters:parameters, cancelToken:cancelToken);
    }on DioError catch(e){
      if(CancelToken.isCancel(e)){
        print('请求取消:' + e.message);
      }else{
        print('请求错误:$e');
      }
    }
    return response.data;
  }

  /// post请求
  post(url,{ options, cancelToken, parameters=null}) async {
    Response response;
    try{
      response = await _dioObject.post(url, queryParameters:parameters !=null ? parameters : {}, cancelToken:cancelToken);
      print(response);
    }on DioError catch(e){
      if(CancelToken.isCancel(e)){
        print('请求取消:' + e.message);
      }else{
        print('请求错误:$e');
      }
    }
    return response.data;
  }

}

调用方式

  DioHttpUtils.getInstance().get("url", parameters: "");
  DioHttpUtils.getInstance().post("url", parameters: "");

本篇到此完结,更多 Flutter 跨平台移动端开发 原创内容持续更新中~

期待您 关注 / 点赞 / 收藏 向着 大前端工程师 晋级!

你可能感兴趣的:(Flutter跨平台移动端开发丨封装网络请求框架 dio)