当我尝试从另一个有状态小部件访问方法是有状态小部件时,发生NoSuchMethodError

时间:2020-04-29 03:12:23

标签: flutter flutter-layout flutter-dependencies flutter-animation flutter-test

我遇到了无法访问有状态窗口小部件方法的问题。

我有三个类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

      }
    });
  }

0 个答案:

没有答案