Flutter 如何在ListView';,或者如何在ListView.itemBuilder上插入小部件?

Flutter 如何在ListView';,或者如何在ListView.itemBuilder上插入小部件?,flutter,flutter-layout,flutter-listview,Flutter,Flutter Layout,Flutter Listview,在本例中,我想创建一个由ItemData的参数列表填充的ListViewTiles的ListView。 我想将标题图像放置为同一ListView的顶部小部件。 图像必须与其他ListTiles一起滚动 Widget _buildListViewWithHeader(BuildContext context, Image banner, List<ItemData> items) { return ListView.builder( itemBuilder: (

在本例中,我想创建一个由ItemData的参数列表填充的ListViewTiles的ListView。
我想将标题图像放置为同一ListView的顶部小部件。
图像必须与其他ListTiles一起滚动

  Widget _buildListViewWithHeader(BuildContext context, Image banner, List<ItemData> items) {
    return ListView.builder(
      itemBuilder: (context, index) {
        return ListTile(
          leading: items[index].leading,
          title: items[index].title,
          trailing: items[index].trailing,
        );
      },
    );
  }
Widget\u buildListViewWithHeader(BuildContext上下文、图像标题、列表项){
返回ListView.builder(
itemBuilder:(上下文,索引){
返回列表块(
前导:项[索引]。前导,
标题:项目[索引]。标题,
尾随:项[索引]。尾随,
);
},
);
}
如何将图像放置在此列表视图的顶部


有没有一种通用方法可以将小部件列表传递给listView,并将它们放在item builder生成的小部件列表之前?

您可以在itemBuilder的第一个索引上返回标题,类似于:

  Widget _buildListViewWithHeader(BuildContext context, Image banner, List<ItemData> items) {
    return ListView.builder(
      itemCount: items == null ? 1 : items.length + 1,
      itemBuilder: (context, index) {
         if (index == 0) {
            // return the header
            return Image.asset(...);
        }
        index -= 1;
        return ListTile(
          leading: items[index].leading,
          title: items[index].title,
          trailing: items[index].trailing,
        );
      },
    );
  }
Widget\u buildListViewWithHeader(BuildContext上下文、图像标题、列表项){
返回ListView.builder(
itemCount:items==null?1:items.length+1,
itemBuilder:(上下文,索引){
如果(索引==0){
//返回标题
返回Image.asset(…);
}
指数-=1;
返回列表块(
前导:项[索引]。前导,
标题:项目[索引]。标题,
尾随:项[索引]。尾随,
);
},
);
}

希望有帮助

这里有一种更通用的方法来注入任意数量的小部件:

Widget _buildListViewWithHeader(BuildContext context, List<Widget> topWidgets, List<ItemData> itemData) {
  return ListView.builder(
    itemCount: topWidgets.length + itemData.length,
    itemBuilder: (context, index) {

      if (index < topWidgets.length) {//<-- returns each injected widget in list.
        return topWidgets[index];
      }

      int itemIndex = index - topWidgets.length; //<-- subtract the number of widgets injected.
      return ListTile(
        leading: itemData[itemIndex].leading,
        title: itemData[itemIndex].title,
        trailing: itemData[itemIndex].trailing,
      );
    },
  );
Widget\u buildListViewWithHeader(BuildContext上下文、List topWidgets、List itemData){
返回ListView.builder(
itemCount:topWidgets.length+itemData.length,
itemBuilder:(上下文,索引){

如果(indexreturn index==0?Image.asset(…):ListTile(…)
Yes,但是我必须调整其余小部件的索引,否则将永远不会创建第0个ItemData。我想这会起作用:
return index==0?Image.asset(…):ListTile(items[index-1]。leading,…)
当然:您必须减去一个以编制数据索引,然后将一个添加到
itemCount