Flutter中如何使用Dio进行网络请求
"在Flutter中使用Dio进行网络请求时遇到问题,想请教几个细节:
- 如何配置Dio的基本请求参数(如baseUrl、timeout)?
- 处理GET/POST请求时,如何正确传递query参数和body数据?
- 拦截器(Interceptors)的具体使用场景是什么?比如日志记录或Token刷新该怎么实现?
- 遇到网络错误(如401/404)时,Dio如何统一捕获并处理异常?
- 文件上传/下载的最佳实践是什么?需要特别注意哪些配置?
目前按照官方文档实现时总感觉不够清晰,求有实际项目经验的小伙伴分享完整示例代码和避坑指南!"
2 回复
在Flutter中使用Dio进行网络请求,首先添加依赖:dio: ^5.0.0。然后导入包,创建Dio实例,使用get、post等方法发送请求,并通过then或async/await处理响应。例如:
var dio = Dio();
var response = await dio.get('https://example.com');
print(response.data);
更多关于Flutter中如何使用Dio进行网络请求的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用Dio进行网络请求的步骤如下:
- 添加依赖
在
pubspec.yaml中添加:
dependencies:
dio: ^5.0.0
运行 flutter pub get
- 基本使用
import 'package:dio/dio.dart';
void fetchData() async {
try {
var dio = Dio();
Response response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
print(response.data);
} catch (e) {
print('Error: $e');
}
}
- 常用配置
var dio = Dio(BaseOptions(
baseUrl: "https://api.example.com",
connectTimeout: Duration(seconds: 5),
receiveTimeout: Duration(seconds: 3),
headers: {"Content-Type": "application/json"},
));
- 常见请求方法
// GET
var response = await dio.get('/path');
// POST
var response = await dio.post('/path', data: {'key': 'value'});
// PUT
var response = await dio.put('/path');
// DELETE
var response = await dio.delete('/path');
- 添加拦截器
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
// 添加认证头
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 {
var response = await dio.get('/path');
} on DioException catch (e) {
if (e.response != null) {
print('服务器错误: ${e.response?.statusCode}');
} else {
print('网络错误: ${e.message}');
}
}
主要特点:
- 支持文件上传/下载
- 请求/响应拦截器
- 请求取消
- 超时配置
- 自动JSON编解码
记得在 android/app/src/main/AndroidManifest.xml 和 ios/Runner/Info.plist 中添加网络权限配置。

