From cc464469bedd9d73bcd4a12ef1b6987f0cb771e8 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Wed, 3 Mar 2021 16:47:06 +0100 Subject: [PATCH] fix: generate image thumbnails and use transparent image as placeholder for cached network images (#310) --- .../lib/src/attachment/file_attachment.dart | 13 ++++----- .../lib/src/attachment/giphy_attachment.dart | 7 +++-- .../lib/src/attachment/image_attachment.dart | 28 ++++++++++++++++--- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/attachment/file_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/file_attachment.dart index f7fbc277..8ce9ecd4 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/file_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/file_attachment.dart @@ -5,6 +5,7 @@ import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import 'package:stream_chat_flutter/src/utils.dart'; import 'package:stream_chat_flutter/src/video_thumbnail_image.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; +import 'package:transparent_image/transparent_image.dart'; import '../upload_progress_indicator.dart'; import 'attachment_widget.dart'; @@ -102,13 +103,11 @@ class FileAttachment extends AttachmentWidget { errorWidget: (_, obj, trace) { return getFileTypeImage(attachment.extraData['other']); }, - progressIndicatorBuilder: (context, _, progress) { - return Center( - child: Container( - width: 20.0, - height: 20.0, - child: const CircularProgressIndicator(), - ), + placeholder: (_, __) { + return Container( + width: size?.width, + height: size?.height, + child: Image.memory(kTransparentImage), ); }, ), diff --git a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart index 8247661c..91f1aeeb 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart @@ -1,6 +1,9 @@ +import 'dart:typed_data'; + import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; +import 'package:transparent_image/transparent_image.dart'; import '../full_screen_media.dart'; import '../stream_chat_theme.dart'; @@ -348,9 +351,7 @@ class GiphyAttachment extends AttachmentWidget { return Container( width: size?.width, height: size?.height, - child: Center( - child: CircularProgressIndicator(), - ), + child: Image.memory(kTransparentImage), ); }, imageUrl: imageUrl, diff --git a/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart index d4b70dd6..40ef0d22 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart @@ -2,6 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/attachment/attachment_upload_state_builder.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; +import 'package:transparent_image/transparent_image.dart'; import 'attachment_title.dart'; import '../full_screen_media.dart'; @@ -51,11 +52,32 @@ class ImageAttachment extends AttachmentWidget { ); }, network: () { - final imageUrl = + var imageUrl = attachment.thumbUrl ?? attachment.imageUrl ?? attachment.assetUrl; + if (imageUrl == null) { return AttachmentError(size: size); } + + var imageUri = Uri.parse(imageUrl); + if (imageUri.host == 'stream-io-cdn.com') { + imageUri = imageUri.replace(queryParameters: { + ...imageUri.queryParameters, + 'height': '500', + 'width': '500', + 'crop': 'center', + 'resize': 'crop', + }); + } else if (imageUri.host == 'stream-cloud-uploads.imgix.net') { + imageUri = imageUri.replace(queryParameters: { + ...imageUri.queryParameters, + 'height': '500', + 'width': '500', + 'fit': 'crop', + }); + } + imageUrl = imageUri.toString(); + return _buildImageAttachment( context, CachedNetworkImage( @@ -65,9 +87,7 @@ class ImageAttachment extends AttachmentWidget { return Container( width: size?.width, height: size?.height, - child: Center( - child: CircularProgressIndicator(), - ), + child: Image.memory(kTransparentImage), ); }, imageUrl: imageUrl,