我有一个硬编码列表,我想将其映射到小部件列表。下面的代码显示弯曲的行,错误为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'),
];
如果您有任何想法,请告诉我,谢谢!
答案 0 :(得分:3)
问题正在使用ListView.builder
,builder
函数期望您一次返回一个Widget
,该时间与提供的索引相对应。直接使用ListView
。
示例:
ListView(
children: items.map((item) => ItemWidget(item: item)).toList(),
);
希望有帮助!
答案 1 :(得分:2)
如果要使用 ListView.builder ,则可以按以下方式使用。这可能会对您有所帮助。
body: ListView.builder(
itemCount: items == null ? 0 : items.length,
itemBuilder: (BuildContext context, int index) {
return ItemWidget(
item: items[index],
);
},
),