类“PreferredSizeWidget”不能用作 mixin,因为它既不是 mixin 类也不是 mixin

Hos*_*our 30 mixins dart flutter

升级到 Flutter 3.10(和 Dart 3)后,我收到此错误:

类“PreferredSizeWidget”不能用作 mixin,因为它既不是 mixin 类也不是 mixin。

当前版本的代码:

class MyAppBar extends StatelessWidget with PreferredSizeWidget {
  ...
}
Run Code Online (Sandbox Code Playgroud)

Hos*_*our 87

如果您遇到同样的错误,只需将“with”更改为“implements”,如下所示:

class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
  ...
}
Run Code Online (Sandbox Code Playgroud)

描述:

在 Dart 3 中,与之前的版本相比,关于 mixin 的规则更加严格。正如发行说明中提到的,在 Dart 3 之前,任何类都可以用作 mixin,只要它没有声明的构造函数并且没有除 Object 之外的超类。在 Dart 3 中,在语言版本 3.0 或更高版本的库中声明的类不能用作 mixin,除非它们显式地用 mixin 关键字标记。

因此,PreferredSizeWidget 没有声明为 mixin,并且在其定义中没有 mixin 关键字。这就是为什么将其用作 mixin 时会遇到错误的原因。

  • 不,这不是一个错字。这是 Dart 3 中 mixins 新规则所需的语法更改。除非明确使用 mixin 关键字标记,否则不能将任何类用作 mixin。PreferredSizeWidget 未标记为 mixin,因此您不能将其与“with”关键字一起使用。您必须使用“implements”关键字,这意味着您必须提供 PreferredSizeWidget 定义的方法的实现。 (2认同)