Flutter如何使用dio进行网络请求
我在Flutter项目中使用dio进行网络请求时遇到了一些问题。具体场景是:
- 如何正确配置dio的基本设置,比如设置baseUrl和超时时间?
- 发送GET/POST请求时,参数应该如何传递,比如query parameters和request body?
- 如何处理返回的响应数据,比如JSON解析和错误处理?
- 如何添加请求拦截器和响应拦截器来实现全局的日志打印或token验证?
- 文件上传和下载该怎么实现?
希望有经验的朋友能分享一下具体的代码示例和最佳实践。
2 回复
使用Dio进行网络请求步骤:
- 添加依赖:
dio: ^5.0.0 - 创建Dio实例
- 发送请求:
- GET:
dio.get(url) - POST:
dio.post(url, data: data)
- GET:
- 处理响应结果
支持拦截器、超时设置等高级功能。
更多关于Flutter如何使用dio进行网络请求的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用dio进行网络请求的步骤如下:
- 添加依赖
在
pubspec.yaml文件中添加 dio 依赖:
dependencies:
dio: ^5.0.0
然后运行 flutter pub get
- 基本使用示例
import 'package:dio/dio.dart';
void fetchData() async {
try {
// 创建Dio实例
final dio = Dio();
// 发起GET请求
Response response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
// 处理响应数据
print(response.data);
} catch (e) {
print('请求出错: $e');
}
}
- 常用请求方法
// POST请求
Response response = await dio.post(
'https://api.example.com/data',
data: {'name': 'John', 'age': 30},
);
// PUT请求
Response response = await dio.put(
'https://api.example.com/data/1',
data: {'name': 'Jane'},
);
// DELETE请求
Response response = await dio.delete('https://api.example.com/data/1');
- 配置选项
final dio = Dio(BaseOptions(
baseUrl: 'https://api.example.com',
connectTimeout: Duration(seconds: 5),
receiveTimeout: Duration(seconds: 3),
headers: {
'Content-Type': 'application/json',
},
));
- 添加拦截器
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
// 添加token等认证信息
options.headers['Authorization'] = 'Bearer token';
return handler.next(options);
},
onResponse: (response, handler) {
return handler.next(response);
},
onError: (DioException e, handler) {
return handler.next(e);
},
));
- 错误处理
try {
Response response = await dio.get('/data');
} on DioException catch (e) {
if (e.response != null) {
print('服务器错误: ${e.response?.statusCode}');
} else {
print('网络错误: ${e.message}');
}
}
主要特性:
- 支持Restful API
- 拦截器机制
- 文件上传/下载
- 请求取消
- 超时配置
这是dio的基本用法,可以根据实际需求添加更多高级功能。

