Column(
children: <Widget>[
...myObject
.map((data) => Text("Text 1"), Text("Text 2")),
]
);
此代码块将失败,因为我将返回2个小部件而不是一个。如何在不创建地图内另一列的情况下修复它并返回所需的小部件?
答案 0 :(得分:0)
首先,您不能使用箭头函数返回多个值,您需要将其更改为一个返回小部件列表的普通函数。其次,由于.map是惰性的,您需要使用.toList()方法,并且需要进行迭代才能映射执行。
通过这两个步骤,您将以List<List<Widget>>
结尾,应该先将其放平,然后再将其返回到需要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;
}
希望有帮助!