Flutter中Widget的重建条件:无状态组件值不变时是否重建?
当StatelessWidget参数值相同时,组件是否会重建?
我们分三种典型场景来分析:
场景1:使用const修饰的组件
/// 此场景下为const组件,因此不会被重建。 const Text("hi") // 不重建。
用const修饰的组件会被Flutter缓存,只要参数不发生变化,即便父组件触发setState,该组件也不会重建。
场景2:参数值发生变更时
/// 文本已变更,因此会被重建。 String text = "hi" Text(text) setState(() { text = "hello" // Text组件重建。 });
当组件的参数值(这里是text)从"hi"变为"hello"时,父组件调用setState后,Text组件会因为参数变化而触发重建。
场景3:参数值未变更或被设置为相同值时
/// 此处Text组件是否会重建? String text = "hi" Text(text) setState(() { // 无操作 或 text = "hi"; });
这种情况下,Text组件会重建。因为Flutter中调用setState会触发父组件的完整重建流程,默认逻辑下,不管子组件的参数有没有变化,都会跟着执行重建。如果想避免这种无意义的重建,可以给组件添加const修饰,或者通过Equatable、自定义shouldRebuild逻辑来做性能优化。
内容的提问来源于stack exchange,提问作者dylan.kwon
相关产品推荐
相关产品推荐

