使用ValueNotifier时StatefulWidget带const构造与StatelessWidget非const构造最佳实践
第二种实现(带const构造函数的StatefulWidget)是更优的方案,原因如下:
- 解决了状态丢失的问题:StatelessWidget的实例会在父组件触发重建时被重新创建,定义在其内部的
ValueNotifier会随着实例重建被重新初始化,之前存储的状态会直接丢失,属于隐性的bug风险。而StatefulWidget的State对象独立于Widget实例存储,Widget实例重建时State会被复用,内部的ValueNotifier实例不会被重新创建,状态可以正常持久化。 - 有明确的性能优势:带const构造的StatefulWidget在父组件重建时,只要传入的参数没有发生变化,框架会直接复用已有的Widget实例,不会触发不必要的重建流程,性能远优于非const的StatelessWidget实现。
- 符合Flutter的设计规范:StatelessWidget的定位就是用于无内部可变状态的纯展示场景,本身不应该持有长生命周期的可变状态对象,有内部状态管理需求时使用StatefulWidget是官方推荐的标准实现方式。
内容的提问来源于stack exchange,提问作者JeanChristophe P
相关产品推荐
相关产品推荐

