Ограничение on у mixin в Dart
Иногда mixin обращается к полям или методам
определенного типа. Тогда после имени mixin
пишут on и класс, для которого этот
фрагмент рассчитан. Подключить такой mixin
можно только к этому классу или его наследнику.
У класса Post есть поле title.
Mixin Helper выведет заголовок записи:
class Post {
String title = "";
}
mixin Helper on Post {
void show() {
print(title);
}
}
class Article extends Post with Helper {}
Создадим объект, заполним поля и проверим результат:
var post = Article();
post.title = "note";
post.show();
Без on Post компилятор не знал бы,
что у объекта есть title. Ограничение
защищает от подключения mixin к постороннему
классу, где нужных полей нет.
Mixin может требовать реализацию отдельного
метода без тела. Класс с with обязан
дописать такой метод сам:
mixin TestTrait {
int method1() {
return 1;
}
int method2();
}
class Employee with TestTrait {
@override
int method2() {
return 2;
}
}
Создадим объект и вызовем метод:
var emp = Employee();
print(emp.method1() + emp.method2());
Скопируйте mixin TestTrait и класс
Employee из примера выше. Удалите
реализацию method2 и убедитесь,
что программа без нее не компилируется.