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

"在Flutter中使用Dio进行网络请求时遇到问题,想请教几个细节:

  1. 如何配置Dio的基本请求参数(如baseUrl、timeout)?
  2. 处理GET/POST请求时,如何正确传递query参数和body数据?
  3. 拦截器(Interceptors)的具体使用场景是什么?比如日志记录或Token刷新该怎么实现?
  4. 遇到网络错误(如401/404)时,Dio如何统一捕获并处理异常?
  5. 文件上传/下载的最佳实践是什么?需要特别注意哪些配置?
    目前按照官方文档实现时总感觉不够清晰,求有实际项目经验的小伙伴分享完整示例代码和避坑指南!"
2 回复

在Flutter中使用Dio进行网络请求,首先添加依赖:dio: ^5.0.0。然后导入包,创建Dio实例,使用getpost等方法发送请求,并通过thenasync/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进行网络请求的步骤如下:

  1. 添加依赖pubspec.yaml 中添加:
dependencies:
  dio: ^5.0.0

运行 flutter pub get

  1. 基本使用
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');
  }
}
  1. 常用配置
var dio = Dio(BaseOptions(
  baseUrl: "https://api.example.com",
  connectTimeout: Duration(seconds: 5),
  receiveTimeout: Duration(seconds: 3),
  headers: {"Content-Type": "application/json"},
));
  1. 常见请求方法
// 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');
  1. 添加拦截器
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);
  }
));
  1. 错误处理
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.xmlios/Runner/Info.plist 中添加网络权限配置。

回到顶部