【发布时间】:2022-01-18 19:27:02
【问题描述】:
在颤振中,我想在我的应用程序中使用一个小部件,如果不满足条件,则会打印一个容器(或任何其他小部件),其中不包含屏幕上的空间。 实际上我想要一个在颤动中不覆盖屏幕空间的小部件。
【问题讨论】:
在颤振中,我想在我的应用程序中使用一个小部件,如果不满足条件,则会打印一个容器(或任何其他小部件),其中不包含屏幕上的空间。 实际上我想要一个在颤动中不覆盖屏幕空间的小部件。
【问题讨论】:
使用SizedBox.shrink()。
例如:
SomeWidget(
child: boolShow ? YourWidget() : SizedBox.shrink(),
)
【讨论】:
.shrink而不是简单地使用SizedBox()有什么优势吗?
SizedBox.shrink() 将width 和height 设置为0,默认情况下初始化null。一般来说,您也可以使用SizedBox 来代替SizedBox.shrink,但使用shrink 这个词可以清楚地表明该小部件将在屏幕上占用最少(或零)空间。使用SizedBox() 可能会被误解,就像您忘记为其提供小部件一样?可能还有其他我现在无法想到的情况。
null 将是相同的,因为它不是child,因此只要其父约束允许,它将占用最小的空间。除非明确说明0 会以某种方式优化布局约束求解器,但我找不到任何证据,并且布局过程已经是一次性的。也许它只是归结为语义......
只需使用 Container() 或 SizedBox()。 不要给出任何高度、宽度或子级。
【讨论】:
有两种方法可以做到这一点。
首先,如果满足条件,您可以显示一个高度为 0 的空 SizedBox。如果条件不满足,则显示所需的小部件。这将如下所示:
child: if_condition_is_met ? Container(child: ...) : const SizedBox(),
如果你在列中应用条件,你可以试试下面的代码。
Column(
children: [
if(the_condition_is_not_met)
Container(child: ---- your widgets ---),
]
)
你也可以使用dialog box来显示消息
showDialog(
context: context,
builder: (context) => AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: const BorderRadius.all(
Radius.circular(20),
),
side: BorderSide(
color: Colors.black,
width: 3,
),
),
title: Text(
'give_a_title',
),
content: Text(
'some_text',
),
actions: [
SizedBox(
child: TextButton(
onPressed: (){},
child: Text(
'Ok',
),
),
)
]
),
);
【讨论】: