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 里的生成代码来提供,或者由子类去实现。

posted @ 2026-02-15 14:17  SpringCore  阅读(16)  评论(0)    收藏  举报