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

我在Flutter项目中使用dio进行网络请求时遇到了一些问题。具体场景是:

  1. 如何正确配置dio的基本设置,比如设置baseUrl和超时时间?
  2. 发送GET/POST请求时,参数应该如何传递,比如query parameters和request body?
  3. 如何处理返回的响应数据,比如JSON解析和错误处理?
  4. 如何添加请求拦截器和响应拦截器来实现全局的日志打印或token验证?
  5. 文件上传和下载该怎么实现?

希望有经验的朋友能分享一下具体的代码示例和最佳实践。

2 回复

使用Dio进行网络请求步骤:

  1. 添加依赖:dio: ^5.0.0
  2. 创建Dio实例
  3. 发送请求:
    • GET:dio.get(url)
    • POST:dio.post(url, data: data)
  4. 处理响应结果

支持拦截器、超时设置等高级功能。

更多关于Flutter如何使用dio进行网络请求的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用dio进行网络请求的步骤如下:

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

然后运行 flutter pub get

  1. 基本使用示例
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');
  }
}
  1. 常用请求方法
// 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');
  1. 配置选项
final dio = Dio(BaseOptions(
  baseUrl: 'https://api.example.com',
  connectTimeout: Duration(seconds: 5),
  receiveTimeout: Duration(seconds: 3),
  headers: {
    'Content-Type': 'application/json',
  },
));
  1. 添加拦截器
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);
  },
));
  1. 错误处理
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的基本用法,可以根据实际需求添加更多高级功能。

回到顶部