繁体   English   中英

Sliver 中的 Listview.builder

[英]Listview.builder inside Sliver

我有一个ListTile小部件的动态列表列表,我想懒惰地加载它,即只有当用户滚动到ListTile时才会构建 ListTile。 我使用ListView.builder()实现了它,它对我来说工作得很好。

但是,当我使用SliverChildListDelegateListView.builder()包装在SliverList中时, Listview.builder()的延迟加载属性不再起作用,现在整个 Listview 仅在初始化期间构建,而不是延迟构建。

我想在Listview.builder()中延迟加载,即使在用SliverList包装它之后也是如此。 我怎样才能做到这一点?

包装成 SliverList 之前的代码:-

      ListView.builder(
        itemCount: items.length,
        physics: NeverScrollableScrollPhysics(),
        shrinkWrap: true,
        itemBuilder: (BuildContext context, int index) {
          if (index == 0) return userLocationWidget;
          return ListTile(items[index]);
        },
      ),

将其变形为 SliverList 后的代码:-

          SliverList(
            delegate: SliverChildListDelegate(
              [
                ListView.builder(
                  itemCount: items.length + 1,
                  physics: NeverScrollableScrollPhysics(),
                  shrinkWrap: true,
                  padding: const EdgeInsets.all(0.0),
                  itemBuilder: (BuildContext context, int index) {
                    if (index == 0) return userLocationWidget;
                    return makeCard(items[index - 1]);
                  },
                ),
              ],
            ),
          ),

您可以使用以下代码:

   SliverList(delegate: SliverChildBuilderDelegate(
          [
           SingleChildScrollView(
              child: Container(
                child:ListView.builder(
                  itemCount: items.length + 1,
                  physics: NeverScrollableScrollPhysics(),
                  shrinkWrap: true,
                  padding: const EdgeInsets.all(0.0),
                  itemBuilder: (BuildContext context, int index) {
                    if (index == 0) return userLocationWidget;
                    return makeCard(items[index - 1]);
                  },
                ),),
            )                   
       ],
    ),
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM