问题描述
正如标题所暗示的,我有很多 StatefulWidget
具有重复的代码,并且希望将其作为抽象类或 mixin 提取到自己的文件中,以效果最好的为准。
我不会将我的项目中的代码粘贴到这里,我只会给出一个简化的示例。
所以首先,我将尝试解释我想要实现的层次结构:
QuizType
WordQuizType (<-- most likely a mixin)
SentenceQuizType (<-- most likely a mixin)
^ 那些要么是抽象类要么是 mixin
我希望所有相关的小部件都具有 QuizType
中定义的所有属性和方法。
一些小部件还会继承自 WordQuizType
并且一些小部件将额外继承自 SentenceQuizType
。
(有些不会从两者继承,只会从 QuizType
继承)
我的自定义小部件将无法同时扩展 2 个类(StatefulWidget
和 Quiztype
)。
所以我的猜测是,我也应该使 QuizType
成为一个 mixin,并实现与此类似的代码:Flutter: inherit from abstract stateless widget。
上面的例子使用 StatelessWidget
,但我使用的是 StatefulWidget
,所以我不确定在哪里添加继承,到 StatefulWidget
或 State<...>
?
class WordWidget1 extends StatefulWidget {
QuizModel quiz;
WordWidget1(this.quiz);
@override
_WordWidget1State createState() => _WordWidget1State();
}
class _WordWidget1State extends State<WordWidget1> {
//these should be available in ALL my widgets
QuestionModel question;
Map<String,dynamic> questionData;
//these should be available only for certain Widgets
String forWordsOnly;
@override
Widget build(BuildContext context) => Container();
}
class SentenceWidget1 extends StatefulWidget {
QuizModel quiz;
SentenceWidget1(this.quiz);
@override
_SentenceWidget1State createState() => _SentenceWidget1State();
}
class _SentenceWidget1State extends State<SentenceWidget1> {
//these should be available in ALL my widgets
QuestionModel question;
Map<String,dynamic> questionData;
//these should be available only for certain Widgets
String forSentencessOnly;
@override
Widget build(BuildContext context) => Container();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)