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
更多关于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
进行网络请求。
- 导入插件
在你的Dart文件中导入api_request_helper
:
import 'package:api_request_helper/api_request_helper.dart';
import 'dart:convert';
- 配置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请求
}
- 进行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'),
),
),
);
}
}
- 进行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,而是使用环境变量或安全存储来管理这些信息。