返回

Dio:Flutter 网络请求框架精解

前端

Dio 简介

Dio 是一个用于在 Dart 和 Flutter 中发送 HTTP 请求的库。它具有以下特点:

  • 简单易用:Dio 的 API 设计简单明了,很容易上手。
  • 功能强大:Dio 支持各种类型的 HTTP 请求,包括 GET、POST、PUT、DELETE 等,还支持 JSON、表单数据、二进制数据等多种数据格式。
  • 可靠稳定:Dio 经过了大量的测试,非常稳定可靠。
  • 高性能:Dio 性能优异,能够快速处理 HTTP 请求。

Dio 基本用法

发送 GET 请求

发送 GET 请求非常简单,只需要使用 dio.get() 方法即可。例如,要获取 https://example.com/api/users 的数据,可以这样写:

Future<Response> response = await dio.get('https://example.com/api/users');

发送 POST 请求

要发送 POST 请求,可以使用 dio.post() 方法。例如,要向 https://example.com/api/users 发送一个名为 user 的 JSON 对象,可以这样写:

var data = {
  'name': 'John Doe',
  'email': 'johndoe@example.com',
};
Future<Response> response = await dio.post('https://example.com/api/users', data: data);

发送 PUT 请求

要发送 PUT 请求,可以使用 dio.put() 方法。例如,要更新 https://example.com/api/users/1 的数据,可以这样写:

var data = {
  'name': 'Jane Doe',
  'email': 'janedoe@example.com',
};
Future<Response> response = await dio.put('https://example.com/api/users/1', data: data);

发送 DELETE 请求

要发送 DELETE 请求,可以使用 dio.delete() 方法。例如,要删除 https://example.com/api/users/1 的数据,可以这样写:

Future<Response> response = await dio.delete('https://example.com/api/users/1');

处理 JSON 响应

Dio 可以自动将 JSON 响应解析为 Dart 对象。例如,如果 https://example.com/api/users 返回以下 JSON 数据:

{
  "users": [
    {
      "id": 1,
      "name": "John Doe",
      "email": "johndoe@example.com"
    },
    {
      "id": 2,
      "name": "Jane Doe",
      "email": "janedoe@example.com"
    }
  ]
}

那么你可以这样获取这些数据:

Response response = await dio.get('https://example.com/api/users');
List<User> users = (response.data['users'] as List).map((e) => User.fromJson(e)).toList();

使用拦截器

拦截器是一个可以在 HTTP 请求发送前或响应返回后执行的函数。你可以使用拦截器来做一些事情,比如添加请求头、记录请求和响应的数据,或者重试失败的请求。

要使用拦截器,你可以使用 dio.interceptors.add() 方法。例如,要添加一个记录请求和响应数据的拦截器,可以这样写:

dio.interceptors.add(InterceptorsWrapper(
  onRequest: (RequestOptions options) {
    print('Requesting ${options.uri}');
  },
  onResponse: (Response response) {
    print('Received response ${response.statusCode} for ${response.requestOptions.uri}');
  },
  onError: (DioError error) {
    print('Error occurred during request to ${error.requestOptions.uri}: ${error.message}');
  },
));

管理网络连接超时

Dio 默认的网络连接超时时间是 10 秒。你可以使用 dio.options.connectTimeoutdio.options.receiveTimeout 属性来修改这个值。例如,要将网络连接超时时间设置为 30 秒,可以这样写:

dio.options.connectTimeout = 30000;
dio.options.receiveTimeout = 30000;

结论

Dio 是一个非常强大易用的网络请求框架,它可以帮助开发者轻松地与服务器进行通信。本文介绍了 Dio 的基本用法,包括如何发送 GET、POST、PUT 和 DELETE 请求,如何处理 JSON 响应,如何使用拦截器,以及如何管理网络连接超时等。希望本文对你有帮助。