Flutter中如何使用dio进行网络请求

在Flutter项目中使用dio进行网络请求时,如何正确配置基础请求参数(如baseUrl、headers)?遇到跨域问题该如何解决?能否提供一个完整的GET/POST请求示例代码,包括错误处理和响应数据解析的最佳实践?

2 回复

使用dio进行网络请求:

  1. 添加依赖:dio: ^5.0.0
  2. 创建Dio实例:
final dio = Dio();
  1. 发送GET请求:
var response = await dio.get('https://api.com/data');
print(response.data);
  1. 发送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进行网络请求的步骤如下:

  1. 添加依赖pubspec.yaml 文件中添加 dio 依赖:

    dependencies:
      dio: ^5.0.0
    

    然后运行 flutter pub get

  2. 基本使用

    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');
      }
    }
    
  3. 常用配置

    final dio = Dio(BaseOptions(
      baseUrl: 'https://api.example.com',
      connectTimeout: Duration(seconds: 5),
      receiveTimeout: Duration(seconds: 3),
    ));
    
  4. POST 请求示例

    Response response = await dio.post(
      '/posts',
      data: {'title': 'Flutter', 'body': 'Dio demo'}
    );
    
  5. 错误处理

    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);
      }
    }
    
  6. 拦截器(可选)

    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"/>
回到顶部