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

Flutter中控制Lottie动画:单次播放及LateInitializationError问题求助

解决Lottie动画单次播放时的LateInitializationError错误

错误原因

你用late关键字声明了_screenController,但在首次访问它之前没有完成初始化。Dart的late修饰符要求变量必须在使用前完成赋值,否则就会抛出这个初始化错误。

解决方案

1. 正确初始化控制器(结合单次播放逻辑)

把组件改成有状态组件,在initState里初始化Lottie动画控制器,同时添加播放状态监听确保播放完成后停止:

late AnimationController _screenController;

@override
void initState() {
  super.initState();
  // 初始化控制器,设置动画时长(匹配你的Lottie动画实际时长)
  _screenController = AnimationController(
    vsync: this,
    duration: const Duration(seconds: 3),
  )..addStatusListener((status) {
      // 动画播放完成后停止,避免循环
      if (status == AnimationStatus.completed) {
        _screenController.stop();
      }
    });
}

// 记得在组件销毁时释放控制器,防止内存泄漏
@override
void dispose() {
  _screenController.dispose();
  super.dispose();
}

2. 绑定控制器到Lottie组件并设置单次播放

在Lottie组件中关联控制器,同时设置repeat: false确保只播放一次,通过onLoaded回调触发播放:

Lottie.asset(
  'assets/your_custom_animation.json', // 替换为你的动画文件路径
  controller: _screenController,
  repeat: false, // 禁用循环播放
  onLoaded: (composition) {
    // 动画资源加载完成后开始播放
    _screenController.forward();
  },
)

3. 避免提前访问控制器

确保所有对_screenController的操作(比如forward())都在initState初始化之后执行,不要在build方法里直接调用控制器方法,否则可能在初始化完成前触发错误。

内容的提问来源于stack exchange,提问作者Muhammad Amir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:15:33