Animation 颤振:在小部件从小部件树中移除时或在小部件结束时设置小部件动画';生命周期?

Animation 颤振:在小部件从小部件树中移除时或在小部件结束时设置小部件动画';生命周期?,animation,flutter,widget,lifecycle,Animation,Flutter,Widget,Lifecycle,我有一个GridView,它显示了网格中项目的自定义小部件。使用AnimationController.forward()命令,这些项目在网格中显示时具有一个动画,可将其大小从0缩放到100% 我的希望是,当网格中的项目列表发生变化并且其中一个项目不再在列表中时,我希望在小部件从树中移除之前反转动画,以使其从网格中移除 我尝试在小部件的dispose方法中执行AnimationController.reverse(),但似乎不起作用 有没有办法在小部件的生命周期结束时制作它的动画?您可以试试这个

我有一个GridView,它显示了网格中项目的自定义小部件。使用AnimationController.forward()命令,这些项目在网格中显示时具有一个动画,可将其大小从0缩放到100%

我的希望是,当网格中的项目列表发生变化并且其中一个项目不再在列表中时,我希望在小部件从树中移除之前反转动画,以使其从网格中移除

我尝试在小部件的dispose方法中执行AnimationController.reverse(),但似乎不起作用

有没有办法在小部件的生命周期结束时制作它的动画?

您可以试试这个酒吧。 您可以将自定义动画与此发布相结合,以达到所需的行为

// With predefined options
LiveGrid.options(
  options: options,

  // Like GridView.builder, but also includes animation property
  itemBuilder: buildAnimatedItem,

  // Other properties correspond to the `ListView.builder` / `ListView.separated` widget
  itemCount: itemsCount,
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
    crossAxisSpacing: 16,
    mainAxisSpacing: 16,
  ),
);
buildAnimatedItem可以是您的自定义动画,您可以这样定义:

Widget buildAnimatedItem(
  BuildContext context,
  int index,
  Animation<double> animation,
) =>
  // For example wrap with fade transition
  FadeTransition(
    opacity: Tween<double>(
      begin: 0,
      end: 1,
    ).animate(animation),
    // And slide transition
    child: SlideTransition(
      position: Tween<Offset>(
        begin: Offset(0, -0.1),
        end: Offset.zero,
      ).animate(animation),
      // Paste you Widget
      child: YouWidgetHere(),
    ),
  );
Widget buildAnimatedItem(
构建上下文上下文,
整数索引,
动画,,
) =>
//例如,使用淡入淡出过渡进行包裹
衰减转换(
透明度:吐温(
开始:0,
完:1,,
).制作动画(动画),
//和滑动过渡
子:幻灯片转换(
位置:吐温(
开始:偏移量(0,-0.1),
结束:偏移0.0,
).制作动画(动画),
//粘贴你的小部件
child:YouWidgetHere(),
),
);

看看pub自述很清楚

我想你不能在dispose上设置动画,因为太晚了,小部件已经被删除了。您需要首先开始删除动画,并设置回调以在动画完成后从树中删除小部件问题是,提供给GridView的列表是动态的,除非我维护网格中所有项目的列表,并将其与我从服务器收到的新列表进行比较,我不知道我怎么会知道物品在离开之前就已经“离开”了?这可能是我最终需要做的事情,以实现我的目标。谢谢,我建议您查看AnimatedSwitcher小部件。了解它是如何工作的,也许你会知道如何实现这样的事情。或者,您可以使用AnimatedSwitcher为整个网格设置动画。找到解决方案了吗?