Flutter Dart 3.11 + Freezed 3.x 类生成错误的问题
在Freezed 2.x类生成定义一般为class
在 Freezed 3.0+ 中,为了适配 Dart 3 的新特性(如 sealed 类和更强的类型检查),推荐的写法确实发生了变化。
在Dart 3.11 + Freezed 3.x中,mixin 里是抽象 getter,如果 class的定义不是 abstract则analyzer 会认为“缺少实现”,就会出现误导性的错误:
Missing concrete implementations of getter _$DeviceState.xxx
其实根本不是没实现,而是类修饰符不对。
在 Freezed 3.x + 新版 Dart 下,统一写法:
@freezed
abstract class DeviceState with _$DeviceState {
const factory DeviceState({
...
}) = _DeviceState;
}
调整的原因:
-
DeviceState 本身只是一个“接口”或“蓝图”,真正的实现是生成的 _DeviceState。
-
消除报错:如果不加 abstract,Dart 编译器会认为 DeviceState 是一个普通的类,必须自己实现 devices、isLoading 等属性。加了 abstract 后,编译器就允许这些属性由 with _$DeviceState 里的生成代码来提供,或者由子类去实现。

浙公网安备 33010602011771号