Flutter通用API响应处理插件base_api_response_flutter的使用
Flutter通用API响应处理插件base_api_response_flutter的使用
base_api_response_flutter
是一个用于处理HTTP API响应及桥接/方法通道响应的封装类。本文将详细介绍如何在Flutter项目中使用该插件。
base api response
BaseApiResponse
类用于封装HTTP API响应和桥接/方法通道响应:
class BaseApiResponse {
bool success = false;
String? errCode;
String? errMsg;
dynamic data;
// 从Map转换为BaseApiResponse对象
static BaseApiResponse fromMap(Map<String?, Object?> map) {
BaseApiResponse response = BaseApiResponse();
response.success = map['success'] ?? false;
response.errCode = map['errCode'];
response.errMsg = map['errMsg'];
response.data = map['data'];
return response;
}
// 将BaseApiResponse对象转换为Map
Map<String, Object?> toMap() {
return {
'success': success,
'errCode': errCode,
'errMsg': errMsg,
'data': data,
};
}
}
BaseApiResponse2
类也是类似的结构:
class BaseApiResponse2 {
bool success = false;
String? code;
String? msg;
dynamic data;
// 从Map转换为BaseApiResponse2对象
static BaseApiResponse2 fromMap(Map<String?, Object?> map) {
BaseApiResponse2 response = BaseApiResponse2();
response.success = map['success'] ?? false;
response.code = map['code'];
response.msg = map['msg'];
response.data = map['data'];
return response;
}
// 将BaseApiResponse2对象转换为Map
Map<String, Object?> toMap() {
return {
'success': success,
'code': code,
'msg': msg,
'data': data,
};
}
}
使用方式
首先,在 pubspec.yaml
文件中添加依赖:
dependencies:
base_api_response_flutter: ^0.0.1
接下来,我们可以通过示例来展示如何使用 base_api_response_flutter
插件。
示例代码
1. 创建API请求
import 'package:http/http.dart' as http;
import 'package:base_api_response_flutter/base_api_response_flutter.dart';
Future<BaseApiResponse> fetchUser(String userId) async {
final url = "https://jsonplaceholder.typicode.com/users/$userId";
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
// 解析JSON响应
var jsonResponse = json.decode(response.body);
return BaseApiResponse.fromMap(jsonResponse);
} else {
throw Exception('Failed to load user');
}
}
2. 处理API响应
void main() async {
try {
BaseApiResponse response = await fetchUser("1");
// 检查请求是否成功
if (response.success) {
print("请求成功");
print("用户数据: ${response.data}");
} else {
print("请求失败");
print("错误码: ${response.errCode}");
print("错误信息: ${response.errMsg}");
}
} catch (e) {
print("发生错误: $e");
}
}
更多关于Flutter通用API响应处理插件base_api_response_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter通用API响应处理插件base_api_response_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
base_api_response_flutter
是一个用于简化 Flutter 应用中 API 响应处理的插件。它可以帮助你统一处理 API 响应的成功和错误情况,减少重复代码,并提高代码的可维护性。以下是如何使用 base_api_response_flutter
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 base_api_response_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
base_api_response_flutter: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 创建 API 服务类
接下来,你可以创建一个 API 服务类,用于处理所有的 API 请求。在这个类中,你可以使用 base_api_response_flutter
来处理 API 响应。
import 'package:base_api_response_flutter/base_api_response_flutter.dart';
import 'package:http/http.dart' as http;
class ApiService {
final String baseUrl = 'https://your-api-url.com';
Future<BaseApiResponse> fetchData() async {
try {
final response = await http.get(Uri.parse('$baseUrl/endpoint'));
if (response.statusCode == 200) {
// 假设 API 返回的数据是 JSON 格式
final data = json.decode(response.body);
return BaseApiResponse.success(data);
} else {
return BaseApiResponse.error('Failed to load data');
}
} catch (e) {
return BaseApiResponse.error('An error occurred: $e');
}
}
}
3. 在 UI 中使用 API 服务
在你的 Flutter UI 中,你可以调用 ApiService
类中的方法来获取数据,并根据 BaseApiResponse
的状态来更新 UI。
import 'package:flutter/material.dart';
import 'api_service.dart';
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final ApiService _apiService = ApiService();
BaseApiResponse _response;
[@override](/user/override)
void initState() {
super.initState();
_fetchData();
}
void _fetchData() async {
setState(() {
_response = BaseApiResponse.loading();
});
final response = await _apiService.fetchData();
setState(() {
_response = response;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Base API Response Example'),
),
body: Center(
child: _response.when(
loading: () => CircularProgressIndicator(),
success: (data) => Text('Data: $data'),
error: (message) => Text('Error: $message'),
),
),
);
}
}
4. 处理不同的响应状态
BaseApiResponse
提供了 when
方法,允许你根据响应的状态(加载中、成功、错误)来显示不同的 UI。
loading
: 当 API 请求正在进行时显示加载指示器。success
: 当 API 请求成功时显示数据。error
: 当 API 请求失败时显示错误信息。
5. 自定义响应处理
你还可以根据需要扩展 BaseApiResponse
类,添加更多的状态或自定义处理逻辑。
class CustomApiResponse<T> extends BaseApiResponse<T> {
final T customData;
CustomApiResponse.success(this.customData) : super.success(customData);
[@override](/user/override)
R when<R>({
R Function() loading,
R Function(T data) success,
R Function(String message) error,
}) {
if (this is BaseApiResponseLoading) {
return loading();
} else if (this is BaseApiResponseSuccess) {
return success(data);
} else if (this is BaseApiResponseError) {
return error(message);
} else {
throw Exception('Unknown response type');
}
}
}