如何在Flutter应用中使用freezed 2.2包?
在Flutter中使用Freezed 2.2版本的实操指南
1. 添加依赖
在项目的pubspec.yaml中添加以下依赖:
dependencies: flutter: sdk: flutter freezed_annotation: ^2.2.0 json_annotation: ^4.8.1 # 需JSON序列化时添加 dev_dependencies: flutter_test: sdk: flutter build_runner: ^2.4.4 freezed: ^2.2.0 json_serializable: ^6.7.0 # 对应JSON序列化的开发依赖
执行flutter pub get完成依赖安装。
2. 定义Freezed数据类
创建dart文件(比如user.dart),编写带Freezed注解的数据类:
import 'package:freezed_annotation/freezed_annotation.dart'; part 'user.freezed.dart'; part 'user.g.dart'; // 启用JSON序列化时添加 @freezed class User with _$User { const factory User({ required String id, required String name, int? age, // 可选字段 }) = _User; // 需JSON序列化时,添加fromJson工厂方法 factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json); }
@freezed标记此类为Freezed数据类with _$User让Freezed自动生成对应实现类- 用
const声明构造函数,生成不可变类,契合Flutter状态管理最佳实践
进阶:Union类型(密封类)
Freezed支持定义Union类型,适合处理多状态场景:
@freezed class Result<T> with _$Result<T> { const factory Result.success(T data) = Success<T>; const factory Result.error(String message) = Error<T>; const factory Result.loading() = Loading<T>; }
3. 生成代码
在终端执行命令生成Freezed实现代码:
# 单次生成 flutter pub run build_runner build # 监听文件变化自动生成(开发推荐) flutter pub run build_runner watch
执行后会自动生成user.freezed.dart和(若配置JSON序列化)user.g.dart文件。
4. 使用生成的代码
创建实例
final user = User(id: '1', name: 'Alice', age: 25);
修改不可变对象(copyWith)
Freezed生成的类为不可变类型,使用copyWith生成新实例:
final updatedUser = user.copyWith(age: 26);
处理Union类型
用when或map方法安全处理Union类型的不同状态:
void handleResult(Result<String> result) { result.when( success: (data) => print('成功:$data'), error: (message) => print('错误:$message'), loading: () => print('加载中'), ); }
JSON序列化/反序列化(若配置)
// 序列化 final json = user.toJson(); // 反序列化 final userFromJson = User.fromJson(json);
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

