小部件中的if语句颤动

时间:2019-07-09 11:15:00

标签: flutter dart

不确定为什么该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语句。.

2 个答案:

答案 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中删除花括号。然后在列表中添加大括号,它将被解释为地图