mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:29:32 -05:00 
			
		
		
		
	fix(mobile) memory leaked causes app to crash when swiping (#673)
* Dispose image provider when swiping away from the asset
This commit is contained in:
		
							parent
							
								
									5403ef4d84
								
							
						
					
					
						commit
						011332e509
					
				@ -12,6 +12,9 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
				
			|||||||
  bool _zoomedIn = false;
 | 
					  bool _zoomedIn = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static const int swipeThreshold = 100;
 | 
					  static const int swipeThreshold = 100;
 | 
				
			||||||
 | 
					  late CachedNetworkImageProvider fullProvider;
 | 
				
			||||||
 | 
					  late CachedNetworkImageProvider previewProvider;
 | 
				
			||||||
 | 
					  late CachedNetworkImageProvider thumbnailProvider;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
@ -65,7 +68,10 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CachedNetworkImageProvider _authorizedImageProvider(
 | 
					  CachedNetworkImageProvider _authorizedImageProvider(
 | 
				
			||||||
      String url, String cacheKey, BaseCacheManager? cacheManager) {
 | 
					    String url,
 | 
				
			||||||
 | 
					    String cacheKey,
 | 
				
			||||||
 | 
					    BaseCacheManager? cacheManager,
 | 
				
			||||||
 | 
					  ) {
 | 
				
			||||||
    return CachedNetworkImageProvider(
 | 
					    return CachedNetworkImageProvider(
 | 
				
			||||||
      url,
 | 
					      url,
 | 
				
			||||||
      headers: {"Authorization": widget.authToken},
 | 
					      headers: {"Authorization": widget.authToken},
 | 
				
			||||||
@ -104,7 +110,7 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void _loadImages() {
 | 
					  void _loadImages() {
 | 
				
			||||||
    CachedNetworkImageProvider thumbnailProvider = _authorizedImageProvider(
 | 
					    thumbnailProvider = _authorizedImageProvider(
 | 
				
			||||||
      widget.thumbnailUrl,
 | 
					      widget.thumbnailUrl,
 | 
				
			||||||
      widget.cacheKey,
 | 
					      widget.cacheKey,
 | 
				
			||||||
      widget.thumbnailCacheManager,
 | 
					      widget.thumbnailCacheManager,
 | 
				
			||||||
@ -121,7 +127,7 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (widget.previewUrl != null) {
 | 
					    if (widget.previewUrl != null) {
 | 
				
			||||||
      CachedNetworkImageProvider previewProvider = _authorizedImageProvider(
 | 
					      previewProvider = _authorizedImageProvider(
 | 
				
			||||||
        widget.previewUrl!,
 | 
					        widget.previewUrl!,
 | 
				
			||||||
        "${widget.cacheKey}_previewStage",
 | 
					        "${widget.cacheKey}_previewStage",
 | 
				
			||||||
        widget.previewCacheManager,
 | 
					        widget.previewCacheManager,
 | 
				
			||||||
@ -133,7 +139,7 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
				
			|||||||
      );
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CachedNetworkImageProvider fullProvider = _authorizedImageProvider(
 | 
					    fullProvider = _authorizedImageProvider(
 | 
				
			||||||
      widget.imageUrl,
 | 
					      widget.imageUrl,
 | 
				
			||||||
      "${widget.cacheKey}_fullStage",
 | 
					      "${widget.cacheKey}_fullStage",
 | 
				
			||||||
      widget.fullCacheManager,
 | 
					      widget.fullCacheManager,
 | 
				
			||||||
@ -150,6 +156,19 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
				
			|||||||
    _loadImages();
 | 
					    _loadImages();
 | 
				
			||||||
    super.initState();
 | 
					    super.initState();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void dispose() async {
 | 
				
			||||||
 | 
					    super.dispose();
 | 
				
			||||||
 | 
					    await thumbnailProvider.evict();
 | 
				
			||||||
 | 
					    await fullProvider.evict();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (widget.previewUrl != null) {
 | 
				
			||||||
 | 
					      await previewProvider.evict();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _imageProvider.evict();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RemotePhotoView extends StatefulWidget {
 | 
					class RemotePhotoView extends StatefulWidget {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user