为什么Flutter中initState初始化late变量仍报LateInitializationError?
错误原因
你在initState方法中创建了和类成员变量同名的局部变量,导致类层面声明的late变量始终没有被赋值,后续访问时触发初始化异常:
- 你已经在
_CustomNavBarState类头部通过late关键字声明了_animationController和_animation两个成员变量 - 在
initState方法中,你写的AnimationController _animationController = ...和Animation<double> _animation = ...属于方法内的局部变量声明,仅在initState作用域内生效,并不会给类成员变量赋值 - 后续
build方法访问_animation、_animate方法访问_animationController时,读取的是从未赋值的类成员变量,因此抛出LateInitializationError
修复代码
修改initState方法,去掉变量前的类型声明,直接给类成员变量赋值即可:
@override void initState() { super.initState(); // 直接赋值给类成员变量,不要重复声明类型 _animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 500)); _animation = Tween<double>(begin: 1, end: 0.8).animate(_animationController); }
补充优化建议
AnimationController使用完成后需要手动释放,避免内存泄漏,新增dispose生命周期方法处理销毁逻辑:
@override void dispose() { _animationController.dispose(); super.dispose(); }
内容的提问来源于stack exchange,提问作者geomikeo
相关产品推荐
相关产品推荐

