Введение в mixin в Dart
Mixin - отдельный фрагмент кода с методами,
который подключают к классу, а не наследуют как
второй родитель. Класс по-прежнему может иметь
одну цепочку extends, а общие команды
выносят в mixin и повторно применяют в разных типах.
Подключение делают ключевым словом with
после объявления класса. Методы mixin становятся
доступны объекту так же, как если бы они были
записаны внутри самого класса. Это не второе
наследование и не создание отдельного объекта mixin.
Mixin объявляют словом mixin и именем,
тело оформляют как у класса. Экземпляр mixin
отдельно не создают: его методы живут только
внутри класса, который указал этот mixin в
списке with.
Такой прием удобен, когда нескольким классам нужны одинаковые команды, но общий предок не подходит.