You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:45:34