Flutter网络请求Dio库的使用及封装详解
简介
在Flutter应用开发中,网络请求是应用开发中的常见需求。Flutter中提供了多种网络请求库供我们使用,其中一款比较优秀的库就是Dio。Dio是一个强大且易用的Dart Http请求库,支持Restful API、请求的拦截和重试、全局Cookie管理等功能。本篇文章将详细讲解Dio的使用及封装。
Dio库的使用
安装
首先,我们需要在pubspec.yaml文件中添加Dio库的依赖,并运行“flutter packages get”进行安装。
dependencies:
dio: ^4.0.0
发送Get请求
使用Dio发送Get请求非常简单,首先我们需要创建一个Dio实例,然后使用该实例发送请求即可。
import 'package:dio/dio.dart';
void main() async {
Dio dio = new Dio();
Response response = await dio.get('http://httpbin.org/get');
print(response.data);
}
其中,Dio有一个简单明了的方法 dio.get(url)来请求数据,response.data返回请求得到的数据,这里我们直接将数据打印输出。
发送Post请求
使用Dio发送Post请求也非常简单,使用post方法即可,如下所示:
import 'package:dio/dio.dart';
void main() async {
Dio dio = new Dio();
Response response = await dio.post(
'http://httpbin.org/post',
data: {'name': '张三', 'age': 20},
);
print(response.data);
}
在这里,data是我们要发送的参数。
Dio库的封装
一般情况下,我们不会在业务代码中直接使用Dio库,而是将其进行一些封装,使其更加易用。下面我们将对Dio库进行简单的封装。
请求基类封装
我们可以定义一个请求基类,用于封装Dio的基础配置。在这个基类中,我们可以定义一些通用的请求头参数,如Token、User-Agent等等,可以降低重复代码的出现,并保证请求的可维护性。
import 'package:dio/dio.dart';
abstract class BaseRequest {
//设置请求地址
String url();
//设置请求头
Map<String, String> headers() {
return {};
}
//请求参数
Map<String, dynamic> params() {
return {};
}
//请求类型
HttpMethod httpMethod();
//定义一个Dio实例
Dio dio() {
return Dio();
}
//发送请求
Future<Response> send() async {
Options options = Options(headers: headers());
switch (httpMethod()) {
case HttpMethod.GET:
return await dio().get(url(), queryParameters: params(), options: options);
case HttpMethod.POST:
return await dio().post(url(), data: params(), options: options);
case HttpMethod.DELETE:
return await dio().delete(url(), queryParameters: params(), options: options);
case HttpMethod.PUT:
return await dio().put(url(), data: params(), options: options);
default:
return null;
}
}
}
enum HttpMethod { GET, POST, DELETE, PUT }
请求基类中,我们定义了如下内容:
- url:设置请求地址
- headers:设置请求头
- params:设置请求参数
- httpMethod:设置请求类型
- dio:定义一个Dio实例
- send:发送请求
请求封装
在上一个步骤中,我们定义了一个请求基类,我们可以通过继承该基类来进行网络请求的封装。
class TestRequest extends BaseRequest {
@override
String url() {
return 'http://httpbin.org/get';
}
@override
HttpMethod httpMethod() {
return HttpMethod.GET;
}
}
class PostRequest extends BaseRequest {
@override
String url() {
return 'https://httpbin.org/post';
}
@override
HttpMethod httpMethod() {
return HttpMethod.POST;
}
@override
Map<String, dynamic> params() {
return {'name': '张三', 'age': 20};
}
}
在上面的代码中,我们继承了BaseRequest,并重写了url、httpMethod和params这三个方法,从而实现了自定义的网络请求。
请求封装的使用
我们可以用以下代码使用我们刚刚封装好的请求类:
void main() async {
TestRequest testRequest = TestRequest();
Response response = await testRequest.send();
print(response.data);
PostRequest postRequest = PostRequest();
Response response1 = await postRequest.send();
print(response1.data);
}
在上面的代码中,我们使用我们刚刚封装好的TestRequest类和PostRequest类,然后发送请求并打印出请求到的数据。
结论
Dio是一款非常强大的Dart Http请求库,在Flutter中使用Dio可以快速、方便地进行HTTP网络请求。本文介绍了Dio库的使用及封装过程,并给出了两个示例说明,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flutter网络请求Dio库的使用及封装详解 - Python技术站