无法将列表映射到小部件

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.builderbuilder 函数要求您在对应于提供的索引的时间返回一个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

将雷达图形集成到小部件中

将 Matplotlib 图形嵌入到小部件中 - PyQt5

iOS将按钮添加到小部件扩展

如何将图像从 Firebase 存储显示到小部件中?

将数据从 Flutter Stream 传递到小部件