Flutter AnimationController with dynamic duration - error: Const variables must be initialized with a constant value
Flutter AnimationController with dynamic duration - error: Const variables must be initialized with a constant value
我想通过我的小部件参数设置动画持续时间,但它不起作用,因为持续时间需要用常量初始化
class CircularTimer extends StatefulWidget {
CircularTimer({@required this.seconds});
_CircularTimer createState() => _CircularTimer();
final seconds;
}
class _CircularTimer extends State<CircularTimer>
with SingleTickerProviderStateMixin {
Animation<double> animation;
AnimationController controller;
@override
void initState() {
super.initState();
controller = AnimationController(
duration: const Duration(/*not working*/seconds: widget.seconds), vsync: this);
animation = Tween<double>(begin: 0, end: 300).animate(controller);
controller.forward();
}
@override
Widget build(BuildContext context) =>
CircularTimerWidget(animation: animation);
}
您不能将这样的数据传递给 const
,因此解决方案是从 Duration
中删除 const
或仅使用一些 const
值。
解法:1
controller = AnimationController(
duration: Duration(seconds: widget.seconds), // remove const
vsync: this,
);
解法:2
controller = AnimationController(
duration: const Duration(seconds: 1), // some const value
vsync: this,
);
我想通过我的小部件参数设置动画持续时间,但它不起作用,因为持续时间需要用常量初始化
class CircularTimer extends StatefulWidget {
CircularTimer({@required this.seconds});
_CircularTimer createState() => _CircularTimer();
final seconds;
}
class _CircularTimer extends State<CircularTimer>
with SingleTickerProviderStateMixin {
Animation<double> animation;
AnimationController controller;
@override
void initState() {
super.initState();
controller = AnimationController(
duration: const Duration(/*not working*/seconds: widget.seconds), vsync: this);
animation = Tween<double>(begin: 0, end: 300).animate(controller);
controller.forward();
}
@override
Widget build(BuildContext context) =>
CircularTimerWidget(animation: animation);
}
您不能将这样的数据传递给 const
,因此解决方案是从 Duration
中删除 const
或仅使用一些 const
值。
解法:1
controller = AnimationController(
duration: Duration(seconds: widget.seconds), // remove const
vsync: this,
);
解法:2
controller = AnimationController(
duration: const Duration(seconds: 1), // some const value
vsync: this,
);