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()
答案 0 :(得分:2)
我注意到的一件事是ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(HttpStatus.class, new HttpStatusSerializer());
module.addDeserializer(HttpStatus.class, new HttpStatusDeserializer());
mapper.registerModule(module);
总是错误的。没有代码将其设置为true,并且在两个地方将其设置为false。其中之一取决于是否为真(因为HttpStatus
不存在,所以永远不会如此)
话虽如此,如果您想让动画再次运行,无论您在何处切换此属性(通常在按钮的@NotNull
@JsonSerialize(using=HttpStatusSerializer.class)
@JsonDeserialize(using=HttpStatusDeserializer.class)
private HttpStatus code;
方法中),都必须调用setState。
在setState中,您可以使用
error