Примесь, или Mixin в языке Dart – это класс, описывающий некоторое поведение. Он чем-то напоминает интерфейс, однако правила его использования несколько отличаются. Примеси не наследуются, а как бы подключаются, «примешиваются» к коду класса, поэтому и называются примесями. Отличие от интерфейса в Java заключается в том, что методы примеси уже не надо переопределять.
Посмотрим на примере. Предположим, нам нужно описать музыканта, который умеет играть разные стили музыки.
// некий абстрактный музыкант. Скрытый интерфейс содержит метод play()
class Musician {
// В интерфейсе
final instrument;
// Не в интерфейсе - это конструктор
Musician(this.name);
// В интерфейсе
void play() => 'Hi, I can play $instrument';
}
class Guitarist implements Musician with Jazz, Rock, Funk {
get name => 'Guitar';
void play(String arg) => 'Hi, I can play $arg by $instrument';
}
Гитарист (Guitarist) имплиментирует Музыканта (Musician) и умеет играть разные стили. А вот как раз стили мы опишем как примеси:
// примесь Rock
mixin Rock {
bool knowsHowToPlayACDC = true;
void playPopMusic(){
if(knowsHowToPlayACDC){
play("TNT")
}
}
}
// примесь Jazz
mixin Jazz {
bool knowsHowToPlayEllington = true;
void playJazzMusic(){
if(knowsHowToPlayEllington){
play("Take the A Train")
}
}
}
// примесь Funk
mixin Funk {
bool knowsHowToPlayBrown = true;
void playFunkMusic(){
if(knowsHowToPlayBrown){
play("I FEEL GOOD!")
}
}
}
Таким образом, мы примешали стили музыки в виде примесей к классу музыканта, тем самым расширив его функциональность.
Эта статья — из книги Быстрый старт Flutter-разработчика