不确定为什么该if语句不起作用:
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
if (text.length > 0) {
for (var val in text) Center(child: etc..)
}
],
),
)
如果没有if语句,if语句(现在已删除)中的代码可以正常工作,但是一旦添加,我就会收到错误The element type 'Map' can't be assigned to the list type 'Widget'
。
我应该如何在窗口小部件中编写此if语句?我意识到它在return
语句中,但不确定为什么for循环很好,但不确定if语句。.
答案 0 :(得分:3)
for loop
在集合内部很好,因为它是 Dart 的新功能(从2.3版开始)。例如,下一个片段将生成新的正方形列表:
var numbers = [1, 2, 3, 4, 5];
var squares = [for (var n in numbers) n * n];
print(squares); // [1, 4, 9, 16, 25]
if
集合内部也是Dart 2.3的新增功能,并且允许滤除滤镜元素:
bool includeZero = false;
var all = [if (includeZero) 0, 1, 2, 3, 4, 5];
print(all); // [1, 2, 3, 4, 5]
您甚至可以将两种构造结合起来:
var includeSquares = true;
var allWithSquares = [
...numbers,
if (includeSquares) for (var n in numbers) n * n
];
print(allWithSquares); // [1, 2, 3, 4, 5, 1, 4, 9, 16, 25]
您唯一不能做的就是使用花括号作为集合内的代码块。 您仍然可以使用花括号将Map定义为元素。在您的情况下,花括号给出了下一个结果:
var includeSquares = true;
var allWithSquares = [
...numbers,
if (includeSquares) {for (var n in numbers) n * n}
];
print(allWithSquares); // [1, 2, 3, 4, 5, {1, 4, 9, 16, 25}]
您可以详细了解Dart的新功能here
答案 1 :(得分:0)
您必须从if中删除花括号。然后在列表中添加大括号,它将被解释为地图