You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何传递VoidCallback?Flutter Animator监听函数传递异常求助

解决Flutter Animator组件endAnimationListener回调异常问题

嘿,我看了你的代码,发现几个小问题导致了异常,咱们一步步来修正:

1. 先搞定基础拼写错误

  • 你把Dart内置的回调类型VoidCallback写成了VoidCallBack(少了一个字母l),这个拼写必须准确,否则会触发类型不匹配的异常。
  • 构造函数里的this._thidation明显是手滑打错了,应该对应类里定义的_duration变量。

2. 核心问题:endAnimationListener的回调执行逻辑错误

你现在写的endAnimationListener: (_) => _action只是把_action这个函数对象返回了,但并没有执行它。endAnimationListener需要的是一个会被触发执行的回调逻辑,所以你需要在回调里调用_action(),而不是返回函数本身。

修正后的完整代码

class AnimatedFade extends StatelessWidget {
  final Duration _duration;
  final VoidCallback _action; // 修正拼写错误

  // 修正构造函数的参数拼写
  AnimatedFade(this._duration, this._action);

  @override
  Widget build(BuildContext context) {
    return Animator(
      duration: _duration,
      // 执行_action函数,而不是返回函数对象
      endAnimationListener: (_) => _action(),
      // 别忘了添加child属性,Animator组件必须包含子Widget
      child: YourTargetChildWidget(), // 替换成你实际要用的子组件
    );
  }
}

调用示例

你传递回调的方式是对的,比如这样使用:

AnimatedFade(
  Duration(milliseconds: 600),
  () {
    // 这里写动画结束后要执行的逻辑
    print("淡入淡出动画执行完毕!");
  },
)

另外补充一点:Animator组件必须传入child属性,你的原代码里漏掉了这部分,这也可能是触发异常的原因之一哦~

内容的提问来源于stack exchange,提问作者Little Monkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:19:51