我需要为Flutter的State<T extends StatefulWidget>
写一个扩展名,以便可以在我的所有州使用一个函数,比方说showSnackBar("Hello world", 5)
。
我尝试写一个mixin
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>
中使用此mixin。没有类型符号,我最终会出错:
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,遇到了诸如these之类的问题,但没有成功。
是的,我知道在Flutter中,合成优先于继承,但是我认为这是我不知道的事情,我会使用合成进行工作,我觉得继承是可以的。
答案 0 :(得分:2)
mixin BaseState<T extends StatefulWidget> on State<T> {
答案 1 :(得分:0)
我做了类似的事情;
mixin BaseState{ .... }
它正在工作,但我不知道后遗症。