如何在Flutter中重建AnimatedWidget

时间:2018-10-22 01:34:38

标签: dart flutter flutter-layout

我是Flutter的新手。

我有一个AnimatedWidget,它基本上将输入文本字段从屏幕的隐藏区域切换到可见部分,但是在某些情况下,我需要重新加载视图。

据我所知,AnimatedWidget在某种程度上扩展了StatefulWidget,但是无法调用setState。

谢谢

1 个答案:

答案 0 :(得分:2)

class MyState extends State<MyPage> with TickerProviderStateMixin {    
  AnimationController controller;

  @override
  void initState() {
    controller = AnimationController(duration: const Duration(milliseconds: 500), vsync: this);
    loadDbData();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    final colorTween =
      ColorTween(begin: Theme.of(context).primaryColor, end: Theme.of(context).primaryColorDark)
        .animate(controller);
    return AnimatedBuilder(
        animation: colorTween,
        builder: (buildContext, child) {
          return Container(
              color: colorTween.value,
          );
        });
  }

对于开始动画,您可以使用:

controller.forward();
controller.forward(from: 0.5);
controller.reverse();

或者您可以这样设置侦听器:

colorTween.addStatusListener((status) {
    if (status == AnimationStatus.completed) {
      controller.reverse();
    } else if (status == AnimationStatus.dismissed) {
      controller.forward();
    }
  });

希望这就是您需要的