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

Flutter中使用@freezed时如何访问类的成员变量进行操作?

Freezed类成员变量访问解决方案

1. 先完成代码生成

写完Freezed类定义后必须先执行构建命令生成对应的适配代码,IDE才能识别生成的成员变量,命令如下:

flutter pub run build_runner build

生成成功后,默认构造的name、age字段就可以直接通过实例访问。

2. 成员变量访问方式

因为你定义了多工厂构造的联合类型,不同构造的实例字段不同,对应两种访问方式:

  • 确定实例构造类型时,直接强转后访问即可:
void method() {
  print('hello world');
  Person p = Person("name", age: 20);
  // 强转为默认构造的实现类后访问字段
  final normalP = p as _Person;
  print(normalP.name); // 输出name
  print(normalP.age); // 输出20

  Person manager = Person.manager("管理员");
  final m = manager as Manager;
  print(m.ttt); // 输出管理员
}
  • 不确定实例构造类型时,用Freezed自带的模式匹配方法安全访问,避免类型转换异常:
Person p = getPersonFromFirebase();
p.when(
  (name, age) => print("普通用户:$name,年龄$age"),
  manager: (ttt) => print("管理员标识:$ttt"),
);

3. 对接Firebase的补充配置

如果要对接Firebase数据库,需要补充Json序列化配置,完整的类定义如下:

import 'package:freezed_annotation/freezed_annotation.dart';

part 'person.freezed.dart';
part 'person.g.dart';

@freezed
class Person with _$Person {
  const Person._();
  const factory Person(String name, {int? age}) = _Person;
  const factory Person.manager(String? ttt) = Manager;

  // 新增Json序列化方法,对接Firebase数据转换
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
}

注意:Dart文件和part引入的文件名建议统一用小写加下划线格式,避免不同操作系统大小写敏感导致的引入错误。


内容的提问来源于stack exchange,提问作者Yerbol Kistaubayev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 15:03:03