【发布时间】:2018-07-24 19:15:29
【问题描述】:
好的,所以我想从 LinearView 获取项目并获得它们的可见性,这样我就可以释放隐藏项目的内存。
有可能做到吗? 您还有其他想法吗?
所以基本上,我想显示从 URL 动态下载的图像流,我希望它们位于 ListView 中,以便人们可以滚动浏览它们,但如果我们只是使用像这样的普通构建器加载 ListView ,
ListView lvb = new ListView.builder(
cacheExtent: 1.0,
itemBuilder: (BuildContext context, int index) {
return new ImageView(MyApp.imageLinks.values.elementAt(index));
},
);
它会一次下载所有项目,并且设备会耗尽内存。所以我想我只是释放图像占用的内存,然后让用户加载更多图像而不必担心内存。
另外,我希望一次只加载 5 张图片,因此将显示 1 张,上方 2 张和下方 2 张,以便更快、更流畅地滚动。
我的问题:
- 有没有办法确定项目是否已绘制(在视图中)?
- 我可以限制我想在 LinearView 中拥有多少个 ImageView,但保持滚动能力。
编辑:承诺的 ImageView 类
class ImageView extends StatelessWidget {
String url;
ImageView([String url]) {
if (url != null) {
this.url = url;
}
print("New image");
}
@override
Widget build(BuildContext context) {
FractionallySizedBox fsb;
if (url != null) {
Image el = Image.network(
url,
scale: 0.1,
);
fsb = new FractionallySizedBox(
widthFactor: 1.0,
child: el,
);
print("New image created");
return fsb;
}
}
一旦 ListView 开始列出项目,它就会开始向控制台发送“已创建新图像”的垃圾邮件。
【问题讨论】: