Flutter网络请求处理插件http_client_handler的使用

Flutter网络请求处理插件http_client_handler的使用

Http Client Handler

style: very_good_analysis Powered by Mason License: MIT

一个基于http包的封装插件,包含GET、POST、PUT、DELETE、POST文件等请求方法,便于使用。

安装 💻

❗ 若要开始使用Http Client Handler,必须在您的机器上安装Dart SDK。

在您的pubspec.yaml中添加http_client_handler

dependencies:
  http_client_handler:

安装它:

dart pub get

持续集成 🤖

Http Client Handler自带了一个内置的GitHub Actions工作流,由Very Good Workflows提供支持,但您也可以添加您喜欢的CI/CD解决方案。

默认情况下,每次拉取请求和推送时,CI都会对代码进行格式化、检查和测试。这确保了随着功能的增加或更改,代码保持一致且行为正确。该项目使用Very Good Analysis进行严格的分析选项设置。代码覆盖率使用Very Good Workflows进行强制执行。


运行测试 🧪

运行所有单元测试:

dart pub global activate coverage 1.2.0
dart test --coverage=coverage
dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info

查看生成的覆盖率报告,可以使用lcov。

# 生成覆盖率报告
genhtml coverage/lcov.info -o coverage/

# 打开覆盖率报告
open coverage/index.html

使用示例

以下是一个完整的示例,展示如何使用http_client_handler插件来处理网络请求。

首先,在pubspec.yaml中添加依赖项:

dependencies:
  http_client_handler:

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

发起GET请求

import 'package:http_client_handler/http_client_handler.dart';

void main() async {
  // 初始化HttpClientHandler实例
  final client = HttpClientHandler();

  // 发起GET请求
  final response = await client.get('https://jsonplaceholder.typicode.com/todos/1');

  // 处理响应
  if (response.statusCode == 200) {
    print('GET 请求成功: ${response.body}');
  } else {
    print('GET 请求失败: ${response.statusCode}');
  }
}

发起POST请求

import 'package:http_client_handler/http_client_handler.dart';
import 'dart:convert';

void main() async {
  // 初始化HttpClientHandler实例
  final client = HttpClientHandler();

  // 准备POST请求的数据
  final data = {
    'title': 'foo',
    'body': 'bar',
    'userId': 1,
  };

  // 发起POST请求
  final response = await client.post(
    'https://jsonplaceholder.typicode.com/posts',
    body: jsonEncode(data),
    headers: {'Content-Type': 'application/json'},
  );

  // 处理响应
  if (response.statusCode == 201) {
    print('POST 请求成功: ${response.body}');
  } else {
    print('POST 请求失败: ${response.statusCode}');
  }
}

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

1 回复

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


http_client_handler 是一个 Flutter 插件,用于简化网络请求的处理。它提供了一种更简洁、更易于管理的方式来执行 HTTP 请求,并且支持请求拦截、响应处理、错误处理等功能。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 http_client_handler 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  http_client_handler: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装插件。

使用 http_client_handler

1. 创建 HttpClientHandler 实例

import 'package:http_client_handler/http_client_handler.dart';

final httpClientHandler = HttpClientHandler();

2. 发送 GET 请求

void fetchData() async {
  try {
    final response = await httpClientHandler.get('https://jsonplaceholder.typicode.com/posts/1');
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
  } catch (e) {
    print('Error: $e');
  }
}

3. 发送 POST 请求

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

4. 添加请求头

void fetchDataWithHeaders() async {
  try {
    final response = await httpClientHandler.get(
      'https://jsonplaceholder.typicode.com/posts/1',
      headers: {
        'Authorization': 'Bearer your_token_here',
      },
    );
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
  } catch (e) {
    print('Error: $e');
  }
}

5. 使用拦截器

http_client_handler 支持请求拦截器,可以在请求发送前或响应返回后进行一些处理。

class LoggingInterceptor implements RequestInterceptor {
  @override
  Future<void> onRequest(RequestOptions options) async {
    print('Request: ${options.method} ${options.url}');
    print('Headers: ${options.headers}');
    print('Body: ${options.body}');
  }

  @override
  Future<void> onResponse(Response response) async {
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
  }

  @override
  Future<void> onError(DioError error) async {
    print('Error: ${error.message}');
  }
}

void main() {
  final httpClientHandler = HttpClientHandler(
    interceptors: [LoggingInterceptor()],
  );

  fetchData();
}

6. 处理错误

http_client_handler 会自动处理一些常见的 HTTP 错误,但你也可以自定义错误处理逻辑。

void fetchDataWithErrorHandling() async {
  try {
    final response = await httpClientHandler.get('https://jsonplaceholder.typicode.com/invalid-url');
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
  } on DioError catch (e) {
    if (e.response != null) {
      print('Error response status: ${e.response!.statusCode}');
      print('Error response body: ${e.response!.body}');
    } else {
      print('Error: ${e.message}');
    }
  } catch (e) {
    print('Unexpected error: $e');
  }
}
回到顶部