Grandes imágenes de ImageCache
Dejar de aumentar el maxByteSize de ImageCache para alojar imágenes grandes.
Resumen
#El maxByteSize de ImageCache ya no se incrementa
automáticamente para alojar imágenes grandes.
Contexto
#Anteriormente, al cargar imágenes en el ImageCache
que tenían un tamaño de bytes mayor que el maxByteSize de ImageCache,
Flutter incrementaba de forma permanente el valor de maxByteSize
para alojar esas imágenes.
Esta lógica a veces conducía a valores de maxByteSize inflados que
dificultaban el trabajo en sistemas con limitaciones de memoria.
Descripción del cambio
#El siguiente pseudocódigo "antes" y "después" demuestra
los cambios realizados en el algoritmo de ImageCache:
// Old logic pseudocode
void onLoadImage(Image image) {
if (image.byteSize > _cache.maxByteSize) {
_cache.maxByteSize = image.byteSize + 1000;
}
_cache.add(image);
while (_cache.count > _cache.maxCount
|| _cache.byteSize > _cache.maxByteSize) {
_cache.discardOldestImage();
}
}
// New logic pseudocode
void onLoadImage(Image image) {
if (image.byteSize < _cache.maxByteSize) {
_cache.add(image);
while (_cache.count > _cache.maxCount
|| _cache.byteSize > cache.maxByteSize) {
cache.discardOldestImage();
}
}
}
Guía de migración
#Podría haber situaciones en las que ImageCache
experimente un exceso de intercambio (thrashing) con la nueva lógica que no ocurría anteriormente,
específicamente si cargas imágenes que son más grandes que tu
valor cache.maxByteSize.
Esto se puede remediar mediante uno de los siguientes enfoques:
- Aumenta el valor de
ImageCache.maxByteSizepara alojar imágenes más grandes. - Ajusta tu lógica de carga de imágenes para garantizar que
las imágenes se adapten bien al valor de
ImageCache.maxByteSizede tu elección. - Crea una subclase de
ImageCache, implementa la lógica deseada, y crea un nuevo binding que exponga tu subclase deImageCache(consulta el código fuente deimage_cache.dart).
Timeline
#El algoritmo antiguo ya no es compatible.
Lanzado en la versión: 1.16.3
En versión estable: 1.17
Referencias
#Documentación de la API:
Problema relevante:
PR relevante:
Otros:
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.