Flutter中如何使用dio进行网络请求
在Flutter项目中使用dio进行网络请求时,如何正确配置基础请求参数(如baseUrl、headers)?遇到跨域问题该如何解决?能否提供一个完整的GET/POST请求示例代码,包括错误处理和响应数据解析的最佳实践?
2 回复
使用dio进行网络请求:
- 添加依赖:
dio: ^5.0.0 - 创建Dio实例:
final dio = Dio();
- 发送GET请求:
var response = await dio.get('https://api.com/data');
print(response.data);
- 发送POST请求:
var response = await dio.post('https://api.com/data', data: {'key': 'value'});
支持拦截器、超时设置等高级功能。
更多关于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'); } } -
常用配置
final dio = Dio(BaseOptions( baseUrl: 'https://api.example.com', connectTimeout: Duration(seconds: 5), receiveTimeout: Duration(seconds: 3), )); -
POST 请求示例
Response response = await dio.post( '/posts', data: {'title': 'Flutter', 'body': 'Dio demo'} ); -
错误处理
try { await dio.get('/path'); } on DioException catch (e) { if (e.response != null) { print(e.response?.data); print(e.response?.statusCode); } else { print(e.message); } } -
拦截器(可选)
dio.interceptors.add(InterceptorsWrapper( onRequest: (options, handler) { // 添加请求头 options.headers['Authorization'] = 'Bearer token'; return handler.next(options); }, ));
主要特点:
- 支持 RESTful API
- 全局配置
- 拦截器机制
- 文件上传/下载
- 请求取消
记得在 android/app/src/main/AndroidManifest.xml 中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>

