Falta de memória ao exibir imagens no ListView
Ok, então eu quero obter itens do LinearView e obter sua visibilidade, para que eu possa liberar memória nos itens ocultos.
É possível fazer isso? Você tem outras idéias?
Então, basicamente, quero mostrar um fluxo de imagens sendo baixadas dinamicamente de URLs, quero que elas estejam em um ListView, para que a pessoa possa rolar por eles, mas se carregarmos o ListView com um construtor normal como este,
ListView lvb = new ListView.builder(
cacheExtent: 1.0,
itemBuilder: (BuildContext context, int index) {
return new ImageView(MyApp.imageLinks.values.elementAt(index));
},
);
faria o download de todos os itens de uma só vez e o dispositivo ficaria sem memória. Então, eu estava pensando em liberar a memória capturada pela imagem e permitir que o usuário carregasse mais imagens sem ter que se preocupar com a memória.
Além disso, eu gostaria de ter apenas 5 imagens carregadas de cada vez, para que 1 seja exibido, 2 acima e 2 abaixo para uma rolagem mais rápida e fluida.
Minhas perguntas:
Existe uma maneira de determinar se o item é desenhado (na vista) ou não?Posso limitar quantas ImageViews eu quero ter no LinearView, mas mantendo a capacidade de rolagem.EDIT: classe ImageView como prometido
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;
}
}
Assim que o ListView começa a listar itens, ele envia "Nova imagem criada" para o console.