首页 > 解决方案 > 返回 Flutter 中的小部件列表

问题描述

Column(
                children: <Widget>[
                  ...myObject
                      .map((data) => Text("Text 1"), Text("Text 2")),
                ]
);

此代码块将失败,因为我返回 2 个小部件而不是一个。我怎样才能修复它并返回尽可能多的小部件而不在地图内创建另一列?

标签: flutter

解决方案


首先,您不能使用箭头函数返回多个值,您需要将其更改为返回小部件列表的普通函数。其次,您需要使用 .toList() 方法,因为 .map 是惰性的,并且您需要迭代才能执行映射。

通过这两个步骤,您将以 a 结束List<List<Widget>>,您应该在将其返回到需要 a 的列之前将其展平List<Widget>。这可以通过带有标识函数的 Iterable.expand() 来实现。

你可以尝试这样的事情:

                Column(
                  children: <Widget>[
                    ..._generateChildrens(myObjects),
                  ],
                ),

获取小部件的实际实现是:

  List<Widget> _generateChildrens(List myObjects) {
    var list = myObjects.map<List<Widget>>(
      (data) {
        var widgetList = <Widget>[];
        widgetList.add(Text("Text 1"));
        widgetList.add(Text("Text 2"));
        return widgetList;
      },
    ).toList();
    var flat = list.expand((i) => i).toList();
    return flat;
  }

希望能帮助到你!


推荐阅读