从这个线程我发现有很多方法可以从树层次结构中隐藏小部件。喜欢使用:
Visibility:
Visibility(
visible: false,
child: Foo(),
);
Run Code Online (Sandbox Code Playgroud)
Offstage:
Offstage(
offstage: true,
child: Foo(),
);
Run Code Online (Sandbox Code Playgroud)
Opacity:
Opacity(
opacity: 0,
child: Foo(),
);
Run Code Online (Sandbox Code Playgroud)
if 健康)状况:
if (visible) {
child
}
Run Code Online (Sandbox Code Playgroud)
什么不是。
他们中的哪一个是首选(我知道Visibility是那个,为什么Visibility),if条件和之间有什么区别Visibility,我如何衡量性能。Opacity文档提到:
不透明度比按需从树中添加和删除子小部件更有效。
那是什么意思,是为了if条件吗?如果是,if那么在这四个中处于什么位置?
不透明度
这个将不透明度 (alpha) 设置为您想要的任何内容。将其设置为0.0比将其设置为 稍微不那么明显0.1,所以希望这很容易理解。小部件仍将保持其大小并占据相同的空间,并保持每个状态,包括动画。由于它留下了间隙,用户仍然可以触摸它或单击它。(顺便说一句,如果你不想让人们触摸一个不可见的按钮,你可以用一个IgnorePointer小部件包装它。)
台下
这个隐藏了子小部件。您可以将其想象为将小部件放在“屏幕之外”,这样用户就不会看到它。小部件仍会遍历颤振管道中的所有内容,直到到达最终的“绘制”阶段,在此阶段它根本不绘制任何内容。这意味着它将保持所有状态和动画,但不会在屏幕上呈现任何内容。此外,它在布局时也不会占用任何空间,不留空隙,用户自然无法点击。
能见度
为了您的方便,这个结合了上述(以及更多)。它具有一些参数,如maintainState,maintainAnimation,maintainSize,maintainInteractivity等取决于你如何设置这些属性,从以下决定:
如果你想保持状态,它会用 anOpacity或 an包裹孩子,这Offstage取决于你是否也想保持大小。此外,除非你想maintainInteractivity,它也会IgnorePointer为你包装 an ,因为点击透明按钮有点奇怪。
如果你根本不想maintainState,它直接child用 a代替,SizedBox所以它完全消失了。您可以SizedBox使用replacement属性将空白更改为您想要的任何内容。
删除小部件
如果您不需要维护状态等,通常建议从树中完全删除小部件。例如,您可以使用if (condition)来决定是否将小部件包含在列表中,或者使用直接condition ? child : SizedBox()将其替换为SizedBox。这避免了不必要的计算,并且对性能来说是最好的。
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |