简介
在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恳求的运用。为后续实战打好根底。
感兴趣的同学学起来吧!