无法将列表映射到小部件

时间:2019-07-16 12:14:25

标签: list dictionary flutter dart

我有一个硬编码列表,我想将其映射到小部件列表。下面的代码显示弯曲的行,错误为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'),
];

如果您有任何想法,请告诉我,谢谢!

2 个答案:

答案 0 :(得分:3)

问题正在使用ListView.builderbuilder函数期望您一次返回一个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],
        );
      },
    ),