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

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

API Helper

api_request_helper 是一个全面的 Flutter 包,通过提供直观的接口简化 REST API 操作。此包通过集成认证、重试逻辑和 WebSocket 支持来简化常见的 API 任务,如获取、更新、删除和可视化 API 数据。

特性

  • 清晰且可扩展的 HTTP 操作 API。
  • 内置的 JSON 解析、错误处理和指标跟踪。
  • 基于令牌的身份验证支持。
  • 支持:
    • 获取列表数据(GET)。
    • 使用查询参数获取数据(GET)。
    • 更新数据(PUT)。
    • 删除数据(DELETE)。
    • 获取分页数据。
    • 可视化 API 数据层次结构。
    • 带有指数退避的请求重试逻辑。
    • 可配置的超时和动态环境切换。
    • 实时数据流传输的 WebSocket 支持。

入门指南

在你的 Flutter 项目中添加此包,请将以下内容添加到 pubspec.yaml 文件:

dependencies:
  api_request_helper: ^0.1.4

安装包:

flutter pub get

使用方法

初始化 API Helper

首先,初始化 ApiHelper 并设置不同的环境的基本 URL:

final apiHelper = ApiHelper(
  environments: {
    'development': 'https://dev.api.example.com',
    'staging': 'https://staging.api.example.com',
    'production': 'https://api.example.com',
  },
  currentEnvironment: 'production',
);

// 设置身份验证令牌
apiHelper.setAuthToken('your-auth-token');

获取列表数据

try {
  List<dynamic> result = await apiHelper.fetchData('/users');
  print(result);
} catch (e) {
  print('Error: $e');
}

获取带查询参数的数据

try {
  final queryParams = {
    'page': '1',
    'limit': '10',
  };

  Map<String, dynamic> result = await apiHelper.fetchDataWithQuery(
    '/users',
    queryParams
  );
  print(result);
} catch (e) {
  print('Error: $e');
}

更新数据

try {
  final updates = {
    'name': 'John Doe',
    'email': 'john@example.com'
  };

  Map<String, dynamic> result = await apiHelper.editData(
    '/users/1',
    updates
  );
  print(result);
} catch (e) {
  print('Error: $e');
}

删除数据

try {
  bool success = await apiHelper.deleteData('/users/1');
  if (success) {
    print('Successfully deleted');
  }
} catch (e) {
  print('Error: $e');
}

获取分页数据

try {
  List<dynamic> result = await apiHelper.fetchPaginatedData('/users', page: 1, limit: 10);
  print(result);
} catch (e) {
  print('Error: $e');
}

生成 API 数据层次结构

try {
  String hierarchy = await apiHelper.generateHierarchyMap('/users');
  print(hierarchy);
} catch (e) {
  print('Error: $e');
}

WebSocket 支持

final wsHelper = WebSocketHelper('wss://api.example.com/socket');
wsHelper.stream.listen((event) {
  print('New message: $event');
});

额外信息

最低要求

  • Dart SDK: >=3.0.0 <4.0.0
  • Flutter: >=3.0.0

依赖项

  • http: ^1.1.0
  • web_socket_channel: ^2.2.0

错误处理

该包抛出带有详细消息和状态码的自定义异常(ApiException)。始终将 API 调用包装在 try-catch 块中以进行适当的错误处理。

指标跟踪

跟踪 API 使用情况和性能:

print('Total Requests: ${apiHelper._metrics.totalRequests}');
print('Average Latency: ${apiHelper._metrics.averageLatency} ms');

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用api_request_helper插件进行网络请求的示例代码。假设你已经将api_request_helper插件添加到了你的pubspec.yaml文件中,并且已经运行了flutter pub get

首先,确保你的pubspec.yaml文件中包含以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  api_request_helper: ^最新版本号  # 请替换为实际的最新版本号

然后,在你的Flutter项目中,你可以按照以下步骤使用api_request_helper进行网络请求。

  1. 导入插件

在你的Dart文件中导入api_request_helper

import 'package:api_request_helper/api_request_helper.dart';
import 'dart:convert';
  1. 配置API Helper

你可以创建一个单例或全局实例来配置你的API Helper。以下是一个简单的配置示例:

class ApiService {
  ApiRequestHelper apiHelper;

  ApiService() {
    apiHelper = ApiRequestHelper(
      baseUrl: 'https://api.example.com/v1/', // 替换为你的API基础URL
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN', // 如果需要认证,替换为实际的token
      },
    );
  }

  // 你可以添加其他方法来封装具体的API请求
}
  1. 进行GET请求
class _MyHomePageState extends State<MyHomePage> {
  ApiService apiService = ApiService();

  Future<void> fetchData() async {
    try {
      var response = await apiService.apiHelper.get('endpoint'); // 替换为你的具体API端点
      if (response.statusCode == 200) {
        var data = jsonDecode(response.body);
        print(data); // 处理你的数据
      } else {
        print('Error: ${response.statusCode}');
      }
    } catch (e) {
      print('Error fetching data: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Network Request Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: fetchData,
          child: Text('Fetch Data'),
        ),
      ),
    );
  }
}
  1. 进行POST请求
Future<void> postData() async {
  try {
    Map<String, dynamic> body = {
      'key1': 'value1',
      'key2': 'value2',
    };

    var response = await apiService.apiHelper.post('endpoint', body: jsonEncode(body)); // 替换为你的具体API端点
    if (response.statusCode == 200 || response.statusCode == 201) {
      var data = jsonDecode(response.body);
      print(data); // 处理你的数据
    } else {
      print('Error: ${response.statusCode}');
    }
  } catch (e) {
    print('Error posting data: $e');
  }
}

你可以在UI中添加一个按钮来触发postData方法,就像fetchData方法一样。

请注意,以上代码是一个简化的示例,实际项目中你可能需要处理更多的错误情况、添加重试逻辑、管理认证token的刷新等。此外,确保在实际项目中不要硬编码敏感信息,如API密钥或认证token,而是使用环境变量或安全存储来管理这些信息。

回到顶部