在Flatter引入空安全特性之前,我能够有条件地在列表中添加小部件,如下所示:
actions: <Widget>[
canCancel
? CupertinoDialogAction(
child: Text(cancelActionText),
onPressed: () {
Navigator.pop(context);
},
)
: null,
].where(notNull).toList()
notNull
是一个自制的过滤器,可以过滤掉空对象...
现在使用空安全性是不可能的,因为小部件列表严格来说必须是非空的。什么是更好的方法?
只需将您的null替换为空的、大小为零的SizedBox
。
SizedBox(width: 0, height: 0)
或者如评论中所建议的:
SizedBox.shrink()
正如YoBo建议的那样,如果使用集合-是这里更好的方法,但是如果由于某种原因您需要能够将
null
s存储在List
中并稍后过滤掉它们(或者如果您只是更喜欢您现有的样式),您可以:
更改列表
类型以允许可为空的元素。也就是说,使用
actions: <Widget?>[
canCancel
? CupertinoDialogAction(
child: Text(cancelActionText),
onPressed: () {
Navigator.pop(context);
},
)
: null,
].whereType<Widget>().toList();
只需
在列表中
使用:
<Widget>[
if (true) Widget(),
]
代码示例:
actions: <Widget>[
if (canCancel)
CupertinoDialogAction(
child: Text(cancelActionText),
onPressed: () {
Navigator.pop(context);
},
),
]
我很熟悉flutter中的无状态和有状态小部件,但我很好奇为什么我们不将有状态小部件定义为无状态小部件?为什么我们需要声明两个不同的类,一个用于createstate方法,一个用于实际的状态实现?
我向上看了看这里和酒吧。dev和flatter文档,但找不到(或者找不到我的查询)这个简单任务的任何解决方案。 我想显示一个,其字母从上到下排列,同时保持字母方向的默认值。因此,旋转的将不起作用。 我期望的结果是: 此外,我还需要将包装到下一行(本例中为列),需要一个高度参数来限制每列从上到下的字母数。 如果最后一部分太难实现,我愿意接受单列解决方案的想法。
我试图添加一些填充的顶部和底部的一些文字和图标在一个卡片小部件。我发现flutter为容器提供了一种简单的方法,但似乎找不到其他小部件的方法(除了将它们包装在容器中)。这是我目前得到的代码: 因此,在我的子列中,我想在顶部和底部添加一些填充,而不必插入新的容器。这可能吗?
我得到下面的异常,而在Android Studio运行flutter代码。 I/颤振(5360):══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════ I/flatter(5360):在构建文本(“xyz”)时抛出以下断言:I/flatter(5360):未找到方向性小部件。I/flatter(5
flutter似乎在空安全检查和非空安全检查之间切换,导致了几十个问题。 空错误检查返回???
我想在左边部分显示个人资料图像,中间部分显示名称和公司(一个在另一个下面),右边部分显示列表图块内的评论和评级。我能够正确显示图像,评论和评级,但文本不显示。我想实现这一点: 图片和评级之间的空白是我想要显示文本的地方(姓名和公司,一个在另一个下面)。不知道我在这里错过了什么。 下面的代码片段: 在我看来,这似乎是一个返回