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

28
在升级到 Flutter 3.10(和 Dart 3)之后,我遇到了这个错误:

类 'PreferredSizeWidget' 不能被用作 mixin,因为它既不是 mixin 类也不是 mixin。

代码的当前版本:

class MyAppBar extends StatelessWidget with PreferredSizeWidget {
  ...
}
1个回答

77
如果你遇到相同的错误,只需将"with"更改为"implements",像这样:
class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
  ...
}

描述:

在Dart 3中,与以前的版本相比,混入(mixins)的规则变得更加严格。如发布说明所述,在Dart 3之前,只要没有声明构造函数并且没有超类(除了Object),任何类都可以用作混入。在语言版本3.0或更高版本的库中声明的类,除非显式标记为混入关键字,否则不能用作混入。

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


implements代替with不是笔误吗?这就像使用错误的关键字一样。 - Elikill58
1
不,这不是一个打字错误。 这是由Dart 3中mixin的新规则所要求的语法更改。除非明确使用mixin关键字标记,否则不能将任何类用作mixin。PreferredSizeWidget没有被标记为mixin,因此您不能使用“with”关键字来使用它。相反,您必须使用“implements”关键字,这意味着您必须提供PreferredSizeWidget定义的方法的实现。 - Hossein Yousefpour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接