我用两个屏幕构建一个应用程序。第一个是动画,第二个屏幕是设置一些属性。
带有动画的第一个屏幕:
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);
},
),
答案 0 :(得分:0)
我尝试了您提供的代码,但没有任何错误。
添加更多相关代码,例如使用动画。
以及如何以及在何处调用go()
函数?
顺便说一句,您是否要布置 animationController ?
在您的第一页中,您必须拥有此
@override
void dispose() {
animationController.dispose();
super.dispose();
}