Cambios en ImageCache e ImageProvider
ImageCache requiere que los implementadores sobrescriban containsKey, e ImageProvider ha marcado resolve como @nonVirtual.
Resumen
#ImageCache ahora tiene un método llamado containsKey.
Las subclases de ImageProvider no deberían sobrescribir resolve,
sino que deberían implementar nuevos métodos en ImageProvider.
Estos cambios fueron enviados en un único commit al framework.
Descripción del cambio
#Las secciones a continuación describen los cambios en containsKey
y ImageProvider.
Cambio en containsKey
#Los clientes de ImageCache, como un ImageProvider personalizado,
pueden querer saber si el caché ya está rastreando una imagen.
Agregar el método containsKey permite a los llamadores descubrir
esto sin llamar a un método como putIfAbsent,
lo cual puede desencadenar una llamada no deseada a ImageProvider.load.
La implementación predeterminada verifica tanto los contenedores (buckets) de imágenes pendientes como los almacenados en caché.
bool containsKey(Object key) {
return _pendingImages[key] != null || _cache[key] != null;
}
Cambios en ImageProvider
#El método ImageProvider.resolve realiza un trabajo complicado
de manejo de errores que normalmente no debería sobrescribirse.
Anteriormente también realizaba el trabajo de cargar la imagen en el
caché de imágenes por medio de ImageProvider.obtainKey y
ImageProvider.load. Las subclases no tenían oportunidad de
sobrescribir este comportamiento sin sobrescribir resolve,
y la capacidad de componer ImageProviders se ve limitada
si múltiples ImageProviders esperan sobrescribir resolve.
Para resolver este problema, ahora resolve está marcado como non-virtual,
y se han agregado dos nuevos métodos protegidos: createStream()
y resolveStreamForKey().
Estos métodos permiten a las subclases controlar la mayor parte del comportamiento
de resolve, sin tener que duplicar todo el trabajo de manejo de errores.
También permite a las subclases que componen ImageProviders
tener más confianza en que solo hay un punto de entrada público
a los diversos proveedores encadenados.
Guía de migración
#Cambio en ImageCache
#Antes de la migración, el código no tendría una sobrescritura de containsKey.
Código después de la migración:
class MyImageCache implements ImageCache {
@override
bool containsKey(Object key) {
// Check if your custom cache is tracking this key.
}
...
}
Cambio en ImageProvider
#Código antes de la migración:
class MyImageProvider extends ImageProvider<Object> {
@override
ImageStream resolve(ImageConfiguration configuration) {
// create stream
// set up error handling
// interact with ImageCache
// call obtainKey/load, etc.
}
...
}
Código después de la migración:
class MyImageProvider extends ImageProvider<Object> {
@override
ImageStream createStream(ImageConfiguration configuration) {
// Return stream, or use super.createStream(),
// which returns a new ImageStream.
}
@override
void resolveStreamForKey(
ImageConfiguration configuration,
ImageStream stream,
Object key,
ImageErrorListener handleError,
) {
// Interact with the cache, use the key, potentially call `load`,
// and report any errors back through `handleError`.
}
...
}
Timeline
#Lanzado en la versión: 1.16.3
En versión estable: 1.17
Referencias
#Documentación de la API:
Issues relevantes:
PRs relevantes:
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.