Flutter如何封装freezed实现API统一响应
在Flutter项目中,我想使用freezed来封装API的统一响应格式,但不太清楚具体如何实现。目前我们的API返回结构包含code、message和data字段,希望能通过freezed自动生成模型类,同时统一处理错误响应和成功响应的解析逻辑。有没有完整的示例或最佳实践可以参考?应该如何定义freezed的模型类,并结合Dio或其他网络库实现类型安全的响应解析?
2 回复
使用Freezed封装API统一响应:
- 定义基础响应模型:
@freezed
class ApiResponse<T> with _$ApiResponse<T> {
const factory ApiResponse.success(T data) = Success;
const factory ApiResponse.error(String message) = Error;
}
- 在API调用中转换:
ApiResponse<User> response = await api.getUser();
return response.when(
success: (data) => data,
error: (msg) => throw Exception(msg),
);
- 配合json_annotation处理序列化。
更多关于Flutter如何封装freezed实现API统一响应的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,使用freezed封装API统一响应可以简化数据模型处理,增强类型安全。以下是实现步骤:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
freezed_annotation: ^2.0.0
dev_dependencies:
build_runner: ^2.0.0
freezed: ^2.0.0
2. 创建统一响应模型
import 'package:freezed_annotation/freezed_annotation.dart';
part 'api_response.freezed.dart';
part 'api_response.g.dart';
@freezed
class ApiResponse<T> with _$ApiResponse<T> {
const factory ApiResponse.success({
required T data,
required int code,
String? message,
}) = Success<T>;
const factory ApiResponse.error({
required int code,
required String message,
T? data,
}) = Error<T>;
factory ApiResponse.fromJson(
Map<String, dynamic> json,
T Function(Object?) fromJsonT,
) => _$ApiResponseFromJson(json, fromJsonT);
}
3. 生成代码
运行命令生成freezed代码:
flutter pub run build_runner build
4. 使用示例
// 具体数据模型
@freezed
class User with _$User {
factory User({required String name, required int age}) = _User;
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
}
// 解析API响应
ApiResponse<User> parseUserResponse(Map<String, dynamic> json) {
return ApiResponse.fromJson(json, (json) => User.fromJson(json as Map<String, dynamic>));
}
// 使用
void handleResponse(ApiResponse<User> response) {
response.when(
success: (data, code, message) => print('用户数据: ${data.name}'),
error: (code, message, data) => print('错误: $message'),
);
}
优势:
- 类型安全,避免运行时错误
- 模式匹配处理成功/错误状态
- 支持泛型,可复用
- 自动生成JSON序列化代码
通过这种方式,可以统一处理API响应,提高代码可维护性。

