【发布时间】:2019-12-03 12:54:35
【问题描述】:
class pin extends StatefulWidget {
@override
_PinState createState() => _PinState();
}
class _PinState extends State<pin> with TickerProviderStateMixin {
AnimationController _controller;
Animation<double> _animation;
bool error = false;
@override
void initState() {
super.initState();
this._controller = AnimationController(
duration: const Duration(milliseconds: 1000), vsync: this);
this._animation =
Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
parent: _controller,
curve: Curves.easeIn,
));
}
@override
Widget build(BuildContext context) {
if(this.error) {
this.error = false;
_controller.forward();
}
return Container(
child: if (this.error)
Container(
child: FadeTransition(
opacity: _animation,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Image.asset("assets/images/sad_face.png"),
),
],
),
),
),
),
}
}
在上面的代码中,FadeTransition() 小部件在应用程序首次启动时是动画的。
FadeTransition() 的可见性由 error 变量切换。
但是下次FadeTransition() 小部件可见时它不是动画的吗?
缺少什么,当切换FadeTransition() 时,小部件每次出现时都应该动画!
error 变量是使用Providers 从外部设置的,而无论error 发生变化,小部件都会重新构建,因此无需使用setState()
【问题讨论】: