无法将列表映射到小部件
Posted
技术标签:
【中文标题】无法将列表映射到小部件【英文标题】:Cannot map a list to a widget 【发布时间】:2019-11-25 04:13:30 【问题描述】:我有一个硬编码列表,我想将它映射到一个小部件列表。下面的代码显示了带有错误The return type 'List<ItemWidget>' isn't a 'Widget', as defined by anonymous closure.dart(return_of_invalid_type_from_closure)
的波浪线。
.................MISSING CODE....................
ListView.builder(
itemBuilder: (context, index) => items.map((item) => ItemWidget(item: item)).toList();
)
..................MISSING CODE....................
class ItemWidget extends StatelessWidget
final Item item;
ItemWidget(this.item);
@override
Widget build(BuildContext context)
return Column(
children: <Widget>[
Expanded(
child: FittedBox(
fit: BoxFit.fill,
child: Image.asset(item.iconPath)
)
),
Padding(
padding: const EdgeInsets.only(top: 15.0),
child: Text(item.name),
)
],
);
编辑:
这是项目列表,目前我只持有一个用于测试目的的项目。
List<Item> items = [
Item(name: 'Medicines', iconPath: '$ICON_BASE_PATH/medicines.svg'),
];
如果您有任何想法,请告诉我,谢谢!
【问题讨论】:
【参考方案1】:问题在于使用ListView.builder
,builder
函数要求您在对应于提供的索引的时间返回一个Widget
。请直接使用ListView
。
例子:
ListView(
children: items.map((item) => ItemWidget(item: item)).toList(),
);
希望有帮助!
【讨论】:
【参考方案2】:如果你想使用 ListView.builder 那么你可以使用如下。这可能会对您有所帮助。
body: ListView.builder(
itemCount: items == null ? 0 : items.length,
itemBuilder: (BuildContext context, int index)
return ItemWidget(
item: items[index],
);
,
),
【讨论】:
以上是关于无法将列表映射到小部件的主要内容,如果未能解决你的问题,请参考以下文章
将 headerView 添加到小部件上的小部件中的 listView 调整大小 android