【问题标题】:how to dispose animation controller in flutter如何在颤动中处理动画控制器
【发布时间】:2021-06-23 13:06:18
【问题描述】:

我有一个问题,比如在处理我的控制器之前我需要致电_controller.stop();

我的代码:-

AnimationController _controller;
@override
void initState()
{
    super.initState();
    _controller = AnimationController(duration: const Duration(milliseconds: 700), vsync: this);
    _controller.repeat(reverse: true);
    _controller.forward();
}

这个动画是为了展示一颗心,就像我们在 Instagram 上点击一样,然后心会增加它的大小并缩小。

点击心形按钮的代码:-

onTap: ()=>controlUserLikePost(),

功能:-

controlUserLikePost()
{
   _controller.reset();
   _controller.forward();
}

所以,我的问题:-

@override
  void dispose()
  {
    _controller.stop();//do i need to call it as well?
    _controller.dispose();
    super.dispose();// and does it matter if i dispose the controller before this line or after this line.
  }

【问题讨论】:

    标签: flutter flutter-animation


    【解决方案1】:

    你不必在处理它之前停止它,除非你想在某个点停止动画。但是关于安全处理它,只需使用_controller.dispose()

    但是,它必须在super.dispose() 之前,而不是之后,这很重要。

    【讨论】:

    • 这对 initstate 也有影响吗?我的意思是在 super.initState() 之前和之后
    • 您不必总是使用 super.initState(),只有在使用 @override initState 时才需要。因此,将逻辑也放在 super 之前。
    • 非常感谢,你能告诉我为什么必须把逻辑放在超级之前。
    • 对于 dispose,我知道这很重要,因为在调用 super.dispose 之前,您需要非常确定控制器已完全被释放。在调用 super dispose 之后,这意味着可以安全地从小部件树中删除小部件及其逻辑。除非确实处置了控制器,否则无法将此移除标记为安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2019-07-25
    • 2019-11-12
    • 2020-12-10
    • 2020-01-14
    相关资源
    最近更新 更多