Flutter中Visibility组件visible为false时子组件仍触发断言的原因
问题解答
- 核心原因在于:组件构造与组件树挂载是两个独立阶段
- 当你写出
Visibility(child: Tooltip(...), visible: false)这样的代码时,Tooltip的构造函数已经被执行,它内部的断言会在实例创建阶段就触发,完全不受后续Visibility是否将其纳入组件树的影响。 - Visibility源码里的
result = visible ? child : replacement,只是在组件build阶段决定最终挂载哪个组件到树中,但child实例的创建(包括构造时的断言检查)早在这一步之前就完成了。
- 当你写出
- 打个通俗的比方:你提前做好了一个蛋糕(创建Tooltip实例),后来决定不把它摆上餐桌(不加入组件树),但蛋糕制作过程中的质量检查(断言)在做好的时候就已经完成了。
内容的提问来源于stack exchange,提问作者Brian Thery
相关产品推荐
相关产品推荐

