Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振AnimationController/Tween在多个AnimatedBuilder中的重用_Flutter_Flutter Animation - Fatal编程技术网

Flutter 颤振AnimationController/Tween在多个AnimatedBuilder中的重用

Flutter 颤振AnimationController/Tween在多个AnimatedBuilder中的重用,flutter,flutter-animation,Flutter,Flutter Animation,我正在构建一个包含多张卡片的屏幕,点击其中一张卡片时,卡片应该会翻转。我可以使用带Tween和AnimatedBuilder的AnimatedController设置卡的动画。我的问题是,在我所有的“卡片”小部件中重复使用/应用同一个动画控制器的最佳方式是什么,而不必创建多个动画控制器和二者,并将其设置到每张卡片上,但仍然允许我分别设置它们的动画。最后,我就是这么做的。我创建了一个有状态的小部件作为Card小部件,并在Card小部件中声明AnimatedController。然后,我在Card小

我正在构建一个包含多张卡片的屏幕,点击其中一张卡片时,卡片应该会翻转。我可以使用带Tween和AnimatedBuilder的AnimatedController设置卡的动画。我的问题是,在我所有的“卡片”小部件中重复使用/应用同一个动画控制器的最佳方式是什么,而不必创建多个动画控制器和二者,并将其设置到每张卡片上,但仍然允许我分别设置它们的动画。

最后,我就是这么做的。我创建了一个有状态的小部件作为Card小部件,并在Card小部件中声明AnimatedController。然后,我在Card小部件中创建一个方法,用它的AnimatedController控制动画。在父窗口小部件中,我将调用相应的卡片窗口小部件方法来控制每张卡片的动画

在卡片小部件中公开showCard方法:

class Card extends StatefulWidget {

  final _CardState _CardState = _CardState();
  @override
  State<StatefulWidget> createState() => _CardState;

  void showCard()=>_CardState.showCard();
}
AnimationController _acCardFlip;
Animation<double> _frontFlip;
Animation<double> _backFlip;

@override
void initState() {
  super.initState();
  _acCardFlip = AnimationController(
    vsync: this,
    duration: const Duration(milliseconds: 250),
  );
  _frontFlip = Tween(
    begin: 1.0,
    end: 0.0,
  ).animate(CurvedAnimation(
    parent: _acCardFlip,
    curve: Interval(0.0, 0.5, curve: Curves.easeIn),
  ));
  _backFlip = CurvedAnimation(
    parent: _acCardFlip,
    curve: Interval(0.5, 1.0, curve: Curves.easeOut),
  );
}

showCard() {
  setState(() {
    if (_acCardFlip.isCompleted || _acCardFlip.velocity > 0)
      _acCardFlip.reverse();
    else
      _acCardFlip.forward();
  });
}

然后在列表中创建一张卡,以独立控制多张卡。

找到解决方案了吗?@YacineBelarbi我在下面添加了我的解决方案作为答案
Card card = Card();
card.showCard();