Search code examples
flutterdartmixins

The class 'PreferredSizeWidget' can't be used as a mixin because it's neither a mixin class nor a mixin


After upgrading to Flutter 3.10 (and Dart 3), I am getting this error:

The class 'PreferredSizeWidget' can't be used as a mixin because it's neither a mixin class nor a mixin.

The current version of the code:

class MyAppBar extends StatelessWidget with PreferredSizeWidget {
  ...
}

Solution

  • If you get the same error, just change the with with the implements like this:

    class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
      ...
    }
    

    Description:

    In Dart 3, the rules around mixins have been made stricter compared to previous versions. As mentioned in the release notes, any class could be used as a mixin before Dart 3, as long as it had no declared constructors and no superclass other than Object. In Dart 3, classes declared in libraries at language version 3.0 or later can't be used as mixins unless they are explicitly marked with the mixin keyword.

    So, PreferredSizeWidget is not declared as a mixin and does not have the mixin keyword in its definition. This is why the error is encountered when using it as a mixin.