美文网首页Flutter圈子FlutterFlutter
Flutter跨平台移动端开发丨网络请求框架 dio

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

作者: MobMsg | 来源:发表于2019-05-24 22:18 被阅读22次

    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

        本文链接:https://www.haomeiwen.com/subject/pclbzqtx.html