Flutter基础之网络框架Dio
简介
在Flutter中,虽然官方提供了HttpClient网络请求框架,但是由于其封装性差,使用步骤繁琐。大多数Flutter开发者更喜欢使用简单高效的第三方网络框架Dio。本文主要介绍Dio的引入及基本使用。
引入
在Flutter工程的pubspec.yaml文件中,添加dio最新版本依赖,然后点击编译工具上的提示 Pub get或者命令行输入flutter pub get即可导入库文件。
基本使用
- GET请求
import 'package:dio/dio.dart';
static _getDataWithDio(String url) async{
return await Dio().get(url).timeout(const Duration(milliseconds: 3000));
}
构造函数
Future<Response<T>> get<T>(
String path,//请求链接
{
Object? data,//请求数据
Map<String, dynamic>? queryParameters, //请求参数
Options? options,//基本配置
CancelToken? cancelToken, //取消token
ProgressCallback? onReceiveProgress, //进度回调
});
- path:请求链接
- data:请求数据
- queryParameters:请求参数
- options:基本配置
- cancelToken:取消token
- onReceiveProgress:返回数据进度回调
- POST请求
import 'package:dio/dio.dart';
static _postDataWithDio(String url,Map<String,dynamic> parameters ) async{
return await Dio().post(url,queryParameters: parameters).timeout(const Duration(milliseconds: 10000));
}
构造函数
Future<Response<T>> post<T>(
String path, {
Object? data,
Map<String, dynamic>? queryParameters,
Options? options,
CancelToken? cancelToken,
ProgressCallback? onSendProgress,
ProgressCallback? onReceiveProgress,
});
- path:请求链接
- data:请求数据
- queryParameters:请求参数
- options:基本配置
- cancelToken:取消token
- onSendProgress:发送数据进度回调
- onReceiveProgress:返回数据进度回调
重要参数
Options可以选择配置各种公共参数。
重要参数如下:
参数名称 | 类型 | 参数含义 |
---|---|---|
method | String | 请求方式:GET,POST |
baseUrl | String | 请求基地址 |
headers | Map<String, dynamic> | Http请求头 |
connectTimeout | int (毫秒) | 连接超时时间 |
receiveTimeout | int (毫秒) | 数据接收超时时间 |
path | String | 请求地址 |
contentType | String | 请求内容类型,默认默认值是"application/json; charset=utf-8 |
responseType | ResponseType | 数据响应类型,默认是json |
使用示例
- 定义网络请求工具
import 'package:dio/dio.dart';
class ApiManager{
static getMainKnowledge() async{
return await _getDataWithDio(_mainKnowledge);
}
static _getDataWithDio(String url) async{
return await Dio().get(url).timeout(const Duration(milliseconds: 10000));
}
}
- 发起网络请求,initState为StateFulWiget的生命周期方法。对StateFulWidget和StatelessWidget不太熟悉的同学可以查看上一篇文章
@override
void initState() {
_getMainKnowledgeList();
super.initState();
}
_getMainKnowledgeList() async {
Response response = await ApiManager.getMainKnowledge();
if (response.statusCode == NetCode.succeed) {
setState(() {
list.clear();
list.addAll(MainKnowledge.fromJson(jsonDecode(response.toString())).data);
});
}
_refreshController.refreshCompleted();
}
- 展示请求结果内容,这里使用的接口是wan android的接口。
总结
Dio支持的功能很多,支持get,post,formData,拦截器,Cookie,文件上传和下载,还支持进度回调。总之Dio是一个功能强大的Dart网络请求库,本文只是介绍常见的get,post请求的使用。为后续实战打好基础。
感兴趣的同学学起来吧!
转载自:https://juejin.cn/post/7259219348370653244