FadeTransition()小部件在颤动中仅动画一次?

时间:2019-12-02 20:51:48

标签: animation flutter

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()

1 个答案:

答案 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