是否可以在 CustomScrollView 中使用 ListView.builder?

Jor*_*son 11 listview dart flutter

是否可以在 a 中使用ListView.builder(或类似的东西)CustomScrollView?我有一个CustomScrollView这样的:

return Scaffold(
  body: CustomScrollView(
    slivers: [
      SliverAppBar(...),
      SliverList(delegate: SliverChildListDelegate(children))
    ],
  ),
);
Run Code Online (Sandbox Code Playgroud)

这很好用,但在我的实际场景中,列表可能有数千个项目,所以我不想将它们全部传递给SliverChildListDelegate. 我想使用ListView.builder(或类似的东西)来构建滚动到视图中的项目。我原以为那里是一个.builder在任的构造函数SliverListSliverChildListDelegate,但我没有看到这样的事情。我错过了什么吗?

Hus*_*lah 19

我不确定它是如何在 CustomScrollView 中完成的,但你可以试试这个:

Scaffold(
      body: NestedScrollView(
        headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            SliverAppBar(...),
          ];
        },
        body: ListView.builder(..),)
);
Run Code Online (Sandbox Code Playgroud)

  • 你让我今天一整天都感觉很好。我努力将 ListView 转换为 Slivers 以在滚动时隐藏页面标题,直到我找到使用“NestedScrollView”和“headerSliv​​erBuilder”的解决方案。非常感谢。 (2认同)

Rém*_*let 16

delegate参数SliverList不一定是SliverChildListDelegate

也可以使用SliverChildBuilderDelegate来达到builder效果ListView.builder

SliverList(delegate: SliverChildBuilderDelegate((context, index) {
  return Container();
}));
Run Code Online (Sandbox Code Playgroud)

  • 需要添加子项计数...因此委托:SliverChildBuilderDelegate( (BuildContext context, int index) { return ...; }, childCount: ...length, ), (2认同)

Saa*_*rki 6

您可以使用 List.generate 作为下面的示例

return Scaffold(
 body: CustomScrollView(
    slivers: [
      SliverAppBar(...),
      SliverList(delegate: SliverChildListDelegate(
          List.generate(yourList.length, (idx) {
                return Padding(
                  padding: const EdgeInsets.only(left: 8.0, right: 8.0),
                  child: Card(
                    child: ListTile(
                      leading: Icon(null),
                      title: Text(yourList[idx]),
                      onTap: null,
                    ),
                  ),
                );
              })
      ))
    ],
  ),
);
Run Code Online (Sandbox Code Playgroud)

  • 除了您提供的代码之外,请考虑提供一个摘要,说明为什么这可以解决问题。 (2认同)