我试图在gridview中使用for循环添加数据,但它显示一些错误。下面是我的组件代码
return new GridView.count(
crossAxisCount: 2,
padding: const EdgeInsets.all(10.0),
crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0,
children: <Widget>[getList()],
);
getList()代码
List<Widget> getList() {
List<Widget> childs = [];
for (var i = 0; i < 10; i++) {
childs.add(new ListItem('abcd ' + $i));
}
return childs;
}
但它显示编译时错误。
The element type 'List<widget>' can't be assigned to the list type 'Widget'
7条答案
按热度按时间relj7zay1#
在这里,您将列表 Package 为列表
这应该是
sq1bmfud2#
使用spread operator:
yqkkidmi3#
使用扩展操作符是解决这个问题的一种方法。但是还有一个涉及使用
toList()
方法。children
属性需要Widget列表。但是,在您的情况下,它将变为以下内容:因此,我们认为,
方案一
Package 应为
children: getList(),
解2(扩展算子)
children: <Widget>[...getList()],
附带说明一下,当您尝试使用类似
map()
方法时,可能会遇到此问题。在这种情况下,toList()
方法的使用就派上用场了。比如说children: someListOfObjects.map((el) => Text(el)).toList(),
roqulrg34#
我发现有两种方法有效。
方法1 -简单
最新版本的
flutter
支持此方法方法2 -有点复杂
在
Flutter 1.12.13+hotfix.7
和Dart 2.7.0
中进行测试,我们可以如下迭代对象列表:遍历对象列表
自定义小部件
数据:对象列表
au9on6nz5#
既然答案不令我满意,所以我找到了另一个解决办法。
Flutter使您可以在图形中的单行上写入条件,因此您可以在单行上插入一个循环,然后插入其他不同的小部件。这是回答主要问题的一个实际例子:
kh212irz6#
我也有同样的问题,我有一个列表:
我希望它在一个返回
list<Widget>
的列中显示它们,所以我跟sad @Günter Zöchbauer一样:我创建了一个函数getList()
:然后我把它分配给
Column
:对我很有效:)
yws3nbqq7#
修复此错误
你可以在Equatable包@override List<Object?> get props => [value];