您好,我正在CustomScrollView中使用以下代码,使用SliverGrid和SliverChildBuilderDelegate在网格中显示图像。在快速滚动时,已经缓存了图像的子部件在离开屏幕时被破坏,并在屏幕上重建。如何避免他们破坏和重建他们的卷轴?
SliverGrid(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 150,
childAspectRatio: 1 / 1,
crossAxisSpacing: 4.0,
mainAxisSpacing: 4.0,
),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ClipRRect(
borderRadius: BorderRadius.circular(5.0),
child: Container(
alignment: Alignment.bottomRight,
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image: CachedNetworkImageProvider(
"https://source.unsplash.com/${150}/${150 + index}/",
),
),
),
child: index == (index / 2) + 1
? Icon(
Icons.burst_mode,
color: AppTheme.fullWhite,
)
: index == (index / 6)
? Icon(
Icons.play_circle_filled,
color: AppTheme.fullWhite,
)
: Container(),
));
},
childCount: childCount,
),
)
注意:如果我删除了图像url中的索引,那么在快速滚动时,它会加载得非常快,因为它显示的是相同的图像。
- https://source.unsplash.com/ ${150}/${150 +索引}/*
3条答案
按热度按时间5cg8jx4n1#
我不知道你是否找到了答案,但这两个选择对我很有效:cacheExtent,shrinkWrap false。您可以增加或减少cacheExtent。我敢肯定,如果它太多了,它会消耗太多的内存,因为列表生成器在构建和销毁时会为您管理内存。
wwodge7n2#
使用** Package 类概念**。这是一个漫长的解决方案。但是你可以根据你的需要定制,使它更短。
Package 类:
在代码中将该类用作:
mwkjh3gx3#
您可以重置此全局配置