animationController上的异常为null:在null上调用了getter'isAnimating'吗?

时间:2020-04-11 22:31:55

标签: flutter

我用两个屏幕构建一个应用程序。第一个是动画,第二个屏幕是设置一些属性。

带有动画的第一个屏幕:

class _RotatingCirclePageState extends State<RotatingCirclePage>
    with SingleTickerProviderStateMixin {
  AnimationController animationController;
  Animation animation;

  @override
  void initState() {
    super.initState();
    animationController = AnimationController(
      duration: Duration(
        seconds: widget.inspi,
      ),
      vsync: this,
    );
    animation = CurvedAnimation(
      parent: animationController,
      curve: Curves.linear,
    );
  }

...

void go(){
        if(animationController.isAnimating){ // ---> Throw Exception 
             animationController.stop();
         }
...
}

...
}

它就像一种魅力。启动应用程序,点击屏幕,然后动画开始... 转到第二个屏幕(使用导航器),设置属性。返回第一个屏幕(使用Navigator),animationController为null。

EXCEPTION CAUGHT BY GESTURE 
I/flutter ( 5888): The following NoSuchMethodError was thrown while handling a gesture:
I/flutter ( 5888): The getter 'isAnimating' was called on null.
I/flutter ( 5888): Receiver: null
I/flutter ( 5888): Tried calling: isAnimating

进入屏幕1到屏幕2的按钮

RaisedButton(
          child: Text('...'),
          onPressed: () {
            Navigator.of(context)
                .push(MaterialPageRoute<Null>(builder: (BuildContext context) {
              return new SliderExample();
            }));
            }),

转到screen2到screen1的按钮

RaisedButton(
              child: Text('Go Back'),
               onPressed: () {
                               _save();
                                Navigator.pop(context);
                            },
                            ),

1 个答案:

答案 0 :(得分:0)

我尝试了您提供的代码,但没有任何错误。

添加更多相关代码,例如使用动画

以及如何以及在何处调用go()函数?

顺便说一句,您是否要布置 animationController

在您的第一页中,您必须拥有此

@override 
void dispose() {
    animationController.dispose();
    super.dispose();   
}