从这个线程我发现有很多方法可以从树层次结构中隐藏小部件。喜欢使用:
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 次 |
最近记录: |