dio 框架介绍
A powerful Http client for Dart, which supports Interceptors, Global configuration, FormData, Request Cancellation, File downloading, Timeout etc
基于 Dart 语言编写的强大的网络请求框架,支持拦截器,全局配置,FormData,请求取消,文件下载,超时监听等
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 跨平台移动端开发 原创内容持续更新中~
期待您 关注 / 点赞 / 收藏 向着 大前端工程师 晋级!
网友评论