我遇到了无法访问有状态窗口小部件方法的问题。
我有三个类Question,QuestionBuilder和Timer。
当Timer类中的动画完成时,我需要在QuestionBuilder类中执行一个方法。
根类是Question,有两个子代QuestionBuilder和Timer。
这是Question类:
class _QuestionState extends State<Question>{
....
return Scaffold( //build method
body: Column(
children: <Widget>[
Timer(),
SizedBox(height: 40),
Expanded(child: QuestionBuilder(questions: widget.questions)),
],
),
),
}
在QuestionBuilder类中,我实现了Timer和QuestionBuilder类。 我在QuestionBuilder中也有一个按钮可以显式执行效果理想的方法。 该类中有两个列表,用于保存所选的选项和下面的calculateMarksandNavigateToSummary()方法中使用的正确选项。
这是QuestionBuilder类中的方法:
class _QuestionBuilderState extends State<QuestionBuilder>{
.....
void calculateMarksandNavigateToSummary() {
int marks = 0;
for (int i = 0; i < correctOptions.length; i++) {
if (selectedOptions[i] == correctOptions[i]) { // check the correct options with selected options
marks += 1;
}
}
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => TestSummary(marks)));
}
FlatButton(
.....
onTap: () => calculateMarksandNavigateToSummary(), //This works perfectly
.....
)
}
然后是我的计时器类,我必须在其中使用状态侦听器侦听动画状态,并在QuestionBuilder类中执行calculateMarksandNavigateToSummary()方法。
计时器类:
class _TimerState extends State<Timer> with SingleTickerProviderStateMixin {
AnimationController _controller;
Animation animation;
@override
void initState() {
super.initState();
_controller =
AnimationController(vsync: this, duration: Duration(minutes: 7));
animation = Tween<double>(begin: 0.1, end: 1).animate(_controller);
_controller.forward(from: _controller.value);
_controller.addStatusListener((status) {
if (status == AnimationStatus.completed) {
// I have to call the calculateMarksandNavigateToSummary() method here
// I Tried QuestionBuilder().calculateMarksandNavigateToSummary(); but it returns no such method error
}
});
}