mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Improve management of cache key
This commit is contained in:
		@@ -10,8 +10,9 @@ import 'package:url_launcher/url_launcher.dart';
 | 
			
		||||
 | 
			
		||||
class FullScreenImageRoute extends StatefulWidget {
 | 
			
		||||
  final String url;
 | 
			
		||||
  final String? cacheKey;
 | 
			
		||||
 | 
			
		||||
  FullScreenImageRoute(this.url);
 | 
			
		||||
  FullScreenImageRoute({required this.url, this.cacheKey});
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  _FullScreenImageRouteState createState() => _FullScreenImageRouteState();
 | 
			
		||||
@@ -28,7 +29,12 @@ class _FullScreenImageRouteState extends State<FullScreenImageRoute> {
 | 
			
		||||
              icon: Icon(Icons.launch), onPressed: () => launch(widget.url))
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
      body: PhotoView(imageProvider: CachedNetworkImageProvider(widget.url)),
 | 
			
		||||
      body: PhotoView(
 | 
			
		||||
          loadingBuilder: (c, i) => Center(child: CircularProgressIndicator()),
 | 
			
		||||
          imageProvider: CachedNetworkImageProvider(
 | 
			
		||||
            widget.url,
 | 
			
		||||
            cacheKey: widget.cacheKey,
 | 
			
		||||
          )),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ class ConversationFileWidget extends StatefulWidget {
 | 
			
		||||
    Key? key,
 | 
			
		||||
    required this.messageID,
 | 
			
		||||
    required this.file,
 | 
			
		||||
  })  : super(key: key);
 | 
			
		||||
  }) : super(key: key);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  _ConversationFileWidgetState createState() => _ConversationFileWidgetState();
 | 
			
		||||
@@ -31,6 +31,10 @@ class ConversationFileWidget extends StatefulWidget {
 | 
			
		||||
class _ConversationFileWidgetState extends State<ConversationFileWidget> {
 | 
			
		||||
  ConversationMessageFile get file => widget.file;
 | 
			
		||||
 | 
			
		||||
  String get _thumbCacheKey => "conv-msg-thumb-${widget.messageID}";
 | 
			
		||||
 | 
			
		||||
  String get _fileCacheKey => "conv-msg-file-${widget.messageID}";
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) => Stack(
 | 
			
		||||
        children: [
 | 
			
		||||
@@ -43,7 +47,7 @@ class _ConversationFileWidgetState extends State<ConversationFileWidget> {
 | 
			
		||||
                  opacity: 0.8,
 | 
			
		||||
                  child: CachedNetworkImage(
 | 
			
		||||
                    imageUrl: file.thumbnail!,
 | 
			
		||||
                    cacheKey: "conv-file-${widget.messageID}",
 | 
			
		||||
                    cacheKey: _thumbCacheKey,
 | 
			
		||||
                    width: _AreaWidth,
 | 
			
		||||
                    height: _AreaHeight,
 | 
			
		||||
                    fit: BoxFit.cover,
 | 
			
		||||
@@ -64,7 +68,9 @@ class _ConversationFileWidgetState extends State<ConversationFileWidget> {
 | 
			
		||||
        return Center(
 | 
			
		||||
          child: NetworkImageWidget(
 | 
			
		||||
            url: file.url!,
 | 
			
		||||
            cacheKey: _fileCacheKey,
 | 
			
		||||
            thumbnailURL: file.thumbnail,
 | 
			
		||||
            thumbnailCacheKey: _thumbCacheKey,
 | 
			
		||||
            allowFullScreen: true,
 | 
			
		||||
          ),
 | 
			
		||||
        );
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,9 @@ import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
class NetworkImageWidget extends StatelessWidget {
 | 
			
		||||
  final String url;
 | 
			
		||||
  final String? cacheKey;
 | 
			
		||||
  final String? thumbnailURL;
 | 
			
		||||
  final String? thumbnailCacheKey;
 | 
			
		||||
  final bool allowFullScreen;
 | 
			
		||||
  final bool roundedEdges;
 | 
			
		||||
  final double? width;
 | 
			
		||||
@@ -20,13 +22,15 @@ class NetworkImageWidget extends StatelessWidget {
 | 
			
		||||
  const NetworkImageWidget({
 | 
			
		||||
    Key? key,
 | 
			
		||||
    required this.url,
 | 
			
		||||
    this.cacheKey,
 | 
			
		||||
    this.thumbnailURL,
 | 
			
		||||
    this.thumbnailCacheKey,
 | 
			
		||||
    this.allowFullScreen = false,
 | 
			
		||||
    this.width,
 | 
			
		||||
    this.height,
 | 
			
		||||
    this.roundedEdges = true,
 | 
			
		||||
    this.loadingHeight,
 | 
			
		||||
  })  : super(key: key);
 | 
			
		||||
  }) : super(key: key);
 | 
			
		||||
 | 
			
		||||
  double? get _loadingHeight => loadingHeight != null ? loadingHeight : height;
 | 
			
		||||
 | 
			
		||||
@@ -38,33 +42,34 @@ class NetworkImageWidget extends StatelessWidget {
 | 
			
		||||
      child: InkWell(
 | 
			
		||||
        onTap: allowFullScreen
 | 
			
		||||
            ? () {
 | 
			
		||||
                showImageFullScreen(context, url);
 | 
			
		||||
                showImageFullScreen(context, url, cacheKey: cacheKey);
 | 
			
		||||
              }
 | 
			
		||||
            : null,
 | 
			
		||||
        child: CachedNetworkImage(
 | 
			
		||||
          imageUrl: thumbnailURL ?? url,
 | 
			
		||||
          cacheKey: thumbnailURL != null ? thumbnailCacheKey : cacheKey,
 | 
			
		||||
          width: width,
 | 
			
		||||
          height: height,
 | 
			
		||||
          fit: BoxFit.cover,
 | 
			
		||||
          placeholder: (c, s) => Container(
 | 
			
		||||
                width: _loadingWidth,
 | 
			
		||||
                height: _loadingHeight,
 | 
			
		||||
                color: Colors.lightBlueAccent,
 | 
			
		||||
                child: Center(
 | 
			
		||||
                  child: CircularProgressIndicator(),
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            width: _loadingWidth,
 | 
			
		||||
            height: _loadingHeight,
 | 
			
		||||
            color: Colors.lightBlueAccent,
 | 
			
		||||
            child: Center(
 | 
			
		||||
              child: CircularProgressIndicator(),
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
          errorWidget: (c, s, o) => Container(
 | 
			
		||||
                width: _loadingWidth,
 | 
			
		||||
                height: _loadingHeight,
 | 
			
		||||
                color: Colors.red,
 | 
			
		||||
                child: Center(
 | 
			
		||||
                  child: Icon(
 | 
			
		||||
                    Icons.error,
 | 
			
		||||
                    color: Colors.white,
 | 
			
		||||
                  ),
 | 
			
		||||
                ),
 | 
			
		||||
            width: _loadingWidth,
 | 
			
		||||
            height: _loadingHeight,
 | 
			
		||||
            color: Colors.red,
 | 
			
		||||
            child: Center(
 | 
			
		||||
              child: Icon(
 | 
			
		||||
                Icons.error,
 | 
			
		||||
                color: Colors.white,
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
      ),
 | 
			
		||||
      borderRadius:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user