Dart mixins. Пример использование миксинов в Dart.
Егор Долгов · 31.07.2019This article was written for an older Flutter version and is being updated. Some code may not compile on the current version.
class MyWidget extends StatefulWidget {
@override
State createState() => _MyWidgetState();
}
class _MyWidgetState extends State with MyLoader, MyProgress {
// мы можем указать столько миксинов, сколько нам это нужно
@override
Widget build(BuildContext context) {
if (!_isLoad) return loader();
if (!_isProgress) return progress();
return Text('Complete');
}
}
mixin MyLoader on State {
// on State - указывает что класс к которому будет применяться данный миксин,
// должен быть унаследован от супер класса State.
bool _isLoad = false;
Widget loader() {
return FlatButton(child: CircularProgressIndicator(), onPressed: ()=> setState((){_isLoad = true;}));
// благодаря on State - мы можем указать на вызов метода setState((){})
// для того чтобы вызвать обновление родительского виджета
}
}
mixin MyProgress on State, MyLoader {
// в этот миксин мы добавили зависимость от миксина MyLoader,
// т.е. без него нельзя будет воспользоваться этим миксином в одиночку
// и мы можем обращаться к параметру: _isLoad
bool _isProgress= false;
Widget progress() {
if (!_isLoad) return Text('Error load');
return FlatButton(child: Text('Progress: 50%'), onPressed: ()=> setState((){_isProgress = true;}));
}
}