【发布时间】:2021-06-04 16:31:57
【问题描述】:
我有一个 ListTile 小部件的动态列表列表,我想延迟加载它,即只有当用户滚动到该位置时才会构建 ListTile。我使用ListView.builder() 实现了它,它对我来说效果很好。
但是,当我使用 SliverChildListDelegate 将 ListView.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