技惊四座的Flutter丨网络请求框架 dio

Posted MobMsg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技惊四座的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 主页:https://github.com/flutterchina/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 跨平台移动端开发 原创内容持续更新中~

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