Мне нужно написать расширение для State<T extends StatefulWidget>
Флаттера, чтобы я мог использовать функцию во всех моих состояниях, скажем, showSnackBar("Hello world", 5)
.Я пытался написать миксин
mixin BaseState on State<ProfileScreen> {
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
void showSnackBar(String text) {
setState(() {
scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Row(
children: <Widget>[
new CircularProgressIndicator(),
new Text(text == null ? " Logging in" : " $text")
],
)));
});
}
void hideSnackBar() {
setState(() {
scaffoldKey.currentState.hideCurrentSnackBar();
});
}
}
Как вы можете видеть, теперь он смешан на State<ProfileScreen>
.Это проблема, потому что я могу использовать этот миксин только в class ProfileScreenState extends State<ProfileScreen>
.Без обозначения типа я получаю сообщение об ошибке:
error: The class 'ProfileScreenState' cannot implement both 'State<ProfileScreen>' and 'State<StatefulWidget>' because the type arguments are different. (conflicting_generic_interfaces at [mobile] lib/Screens/profile.dart:17)
error: Type parameters could not be inferred for the mixin 'BaseState' because no type parameter substitution could be found matching the mixin's supertype constraints (mixin_inference_no_possible_substitution at [mobile] lib/Screens/profile.dart:17)
Я много пытался в Google, видел такие вопросы, как эти , но безуспешно.
И даЯ знаю, что во Флаттере композиция предпочтительнее наследования, но я думаю, что я не знаю, смогу ли я работать с композицией, и я чувствую, что с наследованием все будет в порядке.