Flutter网络请求辅助插件http_request_utils的使用

Flutter网络请求辅助插件http_request_utils的使用

Http Request Utils 是一个用于处理 JSON 请求响应的工具包,它提供了对 JSON 中包含的键值更大的控制能力。通常情况下,我们通过模型解析 JSON 数据时,只依赖于映射中的某个键值,但如果其中任何一个键值失败,我们只能通过查看控制台输出来了解缺少了什么或类型是否不正确。而使用此插件后,会抛出特定的 BodyException 异常,明确指出该键值为 null、类型错误还是根本不存在。

此外,该插件还包含一个 HttpException 模型,可以更方便地处理请求失败的情况。通过此异常,您可以集中管理所有请求中发生的异常,并以简单的对话框或自定义的单一小部件进行统一处理。

功能特性

Body Utils

  • 解析简单的 JSON 键值。
  • 解析多个 JSON 键值。
  • 判断某个键值是否可以为 null。
  • 在键值为 null 的情况下提供默认值。

新功能

  • 现在支持解析列表,可以通过传递一个映射方法来转换列表。
  • 现在支持解析类,甚至可以在出现异常时返回 null。

Http Exception

  • 接收一条消息。
  • 接收一个状态码。
  • 接收一个原因。
  • 接收一个 HTTP 状态码。

使用方法

对于 Body Utils 的使用

factory RequestData.fromJson (dynamic json) {
    return RequestData(
        id: jsonField<String> (json, ["_id", "\$oid"], nullable: false), // 解析单个键值
        name: jsonField<String> (json, ["name",],  nullable: false), // 解析单个键值
        number: jsonField<num> (json, ["number"],  nullable: false), // 解析单个键值
        integer: jsonField<int> (json, ["integer",],  nullable: false), // 解析单个键值
        shortMap: jsonField<dynamic> (json, ["short_map",],  nullable: false), // 解析单个键值
        object: jsonClassField<Object> (json, ["class"], nullOnException: true), // 解析类对象
        aList: jsonListField<ListObject> (
            json, ["a_list"], 
            map: ListObject.fromJson, // 映射方法
            nullable: false
        ),
        date: DateTime.fromMillisecondsSinceEpoch(
            jsonField<int> (json, ["date", "\$date"]), // 解析日期字段
        )
    );
}

// 调用位置
try {
    RequestData myData = RequestData.fromJson(response_body); // 将 JSON 数据解析为对象
} on BodyException catch (error) {
    // 处理解析异常
}

对于 Http Exception 的使用

try {
    final response = await http.get(Uri.parse("https://example.com/api"), headers: {}); // 发起网络请求

    switch (response.statusCode) {
        case 200:
            // 成功操作
            break;
        default:
            // 错误处理
            throw HttpException(
                response.body, // 错误信息
                code: Code.request, // 自定义错误码
                reason: Reason.server, // 错误原因
                status: response.statusCode // HTTP 状态码
            );
    }
} on HttpException {
    rethrow; // 重新抛出异常
} catch (error) {
    throw HttpException(
        error.toString, // 错误信息
        code: Code.system, // 自定义错误码
        status: -1 // 自定义状态码
    );
}
1 回复

更多关于Flutter网络请求辅助插件http_request_utils的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


http_request_utils 是一个用于简化 Flutter 网络请求的辅助插件。它封装了常见的网络请求操作,使得开发者可以更便捷地进行 HTTP 请求。以下是如何使用 http_request_utils 的详细步骤。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 http_request_utils 的依赖:

dependencies:
  flutter:
    sdk: flutter
  http_request_utils: ^1.0.0  # 请根据实际版本号填写

然后运行 flutter pub get 来安装依赖。

2. 导入包

在需要使用 http_request_utils 的 Dart 文件中导入包:

import 'package:http_request_utils/http_request_utils.dart';

3. 使用插件进行网络请求

http_request_utils 提供了多种方法来简化网络请求。以下是几个常见的用法示例:

3.1 GET 请求

void fetchData() async {
  try {
    var response = await HttpRequestUtils.get('https://jsonplaceholder.typicode.com/posts');
    print('Response data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

3.2 POST 请求

void postData() async {
  try {
    var response = await HttpRequestUtils.post(
      'https://jsonplaceholder.typicode.com/posts',
      body: {
        'title': 'foo',
        'body': 'bar',
        'userId': 1,
      },
    );
    print('Response data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

3.3 PUT 请求

void updateData() async {
  try {
    var response = await HttpRequestUtils.put(
      'https://jsonplaceholder.typicode.com/posts/1',
      body: {
        'id': 1,
        'title': 'foo',
        'body': 'bar',
        'userId': 1,
      },
    );
    print('Response data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

3.4 DELETE 请求

void deleteData() async {
  try {
    var response = await HttpRequestUtils.delete('https://jsonplaceholder.typicode.com/posts/1');
    print('Response data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

4. 处理响应

HttpRequestUtils 的请求方法返回一个 Response 对象,其中包含以下属性:

  • statusCode: HTTP 状态码
  • data: 响应数据(通常是 JSON 格式)
  • headers: 响应头

你可以根据需要对响应数据进行处理。

5. 错误处理

HttpRequestUtils 会自动处理一些常见的网络错误,但你仍然可以在 try-catch 块中捕获异常并进行处理。

6. 配置全局选项

你可以通过 HttpRequestUtils 的静态方法来配置全局选项,例如设置超时时间、添加默认请求头等。

void configureHttpRequestUtils() {
  HttpRequestUtils.setTimeout(Duration(seconds: 10));
  HttpRequestUtils.setDefaultHeaders({
    'Authorization': 'Bearer your_token_here',
  });
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!