📅  最后修改于: 2023-12-03 15:00:24.978000             🧑  作者: Mango
Dio 是一个强大的Dart编写的网络请求框架。它非常适合于Flutter应用程序开发,提供了可扩展、可定制的配置选项。
Dio不仅仅是一个网络请求库,它还支持拦截器、全局错误拦截、formData上传、下载、REST API等许多功能。
在 pubspec.yaml
文件中添加依赖:
dependencies:
dio: ^4.0.0
import 'package:dio/dio.dart';
void main() async {
var dio = Dio();
// 发送GET请求
Response response = await dio.get('https://github.com/flutterchina');
// 打印结果
print(response.data);
}
更多使用请看 Dio官方文档。
Dio的拦截器是它的一大特色,我们可以在请求和响应的各个阶段来干预请求和响应的行为。例如添加 token、日志记录、错误处理等。
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
// 在请求之前做一些业务操作
return handler.next(options); // continue
},
onResponse: (response, handler) {
// 在响应之后做一些业务操作
return handler.next(response); // continue
},
onError: (DioError e, handler) {
// 在请求失败时做一些业务操作
return handler.next(e); // continue
},
));
Dio支持FormData上传。可以使用 FormData.fromMap()
将map转换为FormData对象。
FormData formData = FormData.fromMap({
'name': 'wendux',
'age': 25,
'file': await MultipartFile.fromFile('./text.txt', filename: 'upload.txt'),
// 支持File类型、List<File>类型和字节流类型(Uint8List)和 filename属性
});
response = await dio.post('/info', data: formData);
Dio支持文件下载。可以直接使用dio.download方法下载文件。
await dio.download('https://flutter.github.io/assets-for-api-docs/assets/widgets/owl-2.jpg', './download.jpg');
Dio也支持文件上传。可以使用MultipartFile类型上传文件。
// 上传单个文件
FormData formData = FormData.fromMap({
"file": await MultipartFile.fromFile(file.path, filename: "upload.txt"),
});
response = await dio.post("/upload", data: formData);
// 上传多个文件
FormData formData = FormData.fromMap({
"files": [
await MultipartFile.fromFile("./file1.txt", filename: "upload.txt"),
await MultipartFile.fromFile("./file2.txt", filename: "upload.txt"),
],
});
response = await dio.post("/uploads", data: formData);
每个API的设计都应该符合RESTful的规范,Dio也很好的支持Restful API。
class User {
int id;
String name;
User({this.id, this.name});
User.fromJson(Map<String, dynamic> json)
: id = json['id'],
name = json['name'];
Map<String, dynamic> toJson() => {'id': id, 'name': name};
}
// GET请求
response = await dio.get('/users/${id}'); // 获取单个用户
User user = User.fromJson(response.data);
// POST请求
User newUser = User(id: 0, name: 'NewUser');
response = await dio.post('/users', data: newUser.toJson()); // 添加用户
// PUT请求
User updatedUser = User(id: id, name: 'UpdatedUser');
response = await dio.put('/users/${id}', data: updatedUser.toJson()); // 修改用户
// DELETE请求
response = await dio.delete('/users/${id}'); // 删除用户
Dio 是一款非常强大的网络请求框架,支持文件上传,下载,拦截器,全局错误拦截,请求取消等功能。可以帮助开发者更加便捷地与服务器进行数据交互。