【问题标题】:Listview.builder inside SliverSliver 中的 Listview.builder
【发布时间】:2021-06-04 16:31:57
【问题描述】:

我有一个 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]);
                  },
                ),
              ],
            ),
          ),

【问题讨论】:

  • 使用SliverChildBuilderDelegate,而不是SliverChildListDelegate

标签: flutter listview flutter-layout flutter-sliver


【解决方案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]);
                  },
                ),),
            )                   
       ],
    ),
)

【讨论】:

    猜你喜欢
    • 2019-03-15
    • 2021-05-26
    • 2021-10-06
    • 2020-07-21
    • 2022-01-14
    • 2021-02-24
    • 2020-07-02
    • 2021-07-27
    • 2023-01-17
    相关资源
    最近更新 更多