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
相关产品推荐
相关产品推荐

