D
Dart LanguageIntermediate30 XP5 min read

How do Dart mixins work and what are the restrictions?

TL;DR: Mixins allow sharing methods across class hierarchies without inheritance. The 'on' keyword restricts which classes can use a mixin. Dart uses C3 linearization to resolve method order when multiple mixins are applied.

Full Answer

Dart mixins add capabilities to classes without the tight coupling of inheritance. Unlike extending a class, you can apply multiple mixins to one class.

The 'on' constraint

mixin MyMixin on SomeClass means MyMixin can only be applied to classes that extend SomeClass. Inside the mixin, you can call super.method() knowing SomeClass has it.

Linearization order

class A extends B with C, D — method resolution order is: A → D → C → B. The rightmost mixin wins in case of conflict. This is C3 linearization (same as Python's MRO).

💡

Flutter uses mixins extensively: SingleTickerProviderStateMixin, WidgetsBindingObserver, DiagnosticableMixin. They add capabilities to State without requiring inheritance.

Code Examples

dartMixin with 'on' constraint
Output
Breathing...
Breathing...
Swimming!
Breathing...
Flying!

Interview Tip

💡

Mixins differ from interfaces: mixins provide implementation, interfaces provide contracts. Mixins differ from abstract classes: you can use multiple mixins but only extend one class.

#mixins#on-keyword#linearization#multiple-inheritance