fix: generate image thumbnails and use transparent image as placeholder for cached network images (#310)

This commit is contained in:
Salvatore Giordano
2021-03-03 16:47:06 +01:00
committed by GitHub
parent b28ae12597
commit cc464469be
3 changed files with 34 additions and 14 deletions
@@ -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/utils.dart';
import 'package:stream_chat_flutter/src/video_thumbnail_image.dart'; import 'package:stream_chat_flutter/src/video_thumbnail_image.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.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 '../upload_progress_indicator.dart';
import 'attachment_widget.dart'; import 'attachment_widget.dart';
@@ -102,13 +103,11 @@ class FileAttachment extends AttachmentWidget {
errorWidget: (_, obj, trace) { errorWidget: (_, obj, trace) {
return getFileTypeImage(attachment.extraData['other']); return getFileTypeImage(attachment.extraData['other']);
}, },
progressIndicatorBuilder: (context, _, progress) { placeholder: (_, __) {
return Center( return Container(
child: Container( width: size?.width,
width: 20.0, height: size?.height,
height: 20.0, child: Image.memory(kTransparentImage),
child: const CircularProgressIndicator(),
),
); );
}, },
), ),
@@ -1,6 +1,9 @@
import 'dart:typed_data';
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.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 '../full_screen_media.dart';
import '../stream_chat_theme.dart'; import '../stream_chat_theme.dart';
@@ -348,9 +351,7 @@ class GiphyAttachment extends AttachmentWidget {
return Container( return Container(
width: size?.width, width: size?.width,
height: size?.height, height: size?.height,
child: Center( child: Image.memory(kTransparentImage),
child: CircularProgressIndicator(),
),
); );
}, },
imageUrl: imageUrl, imageUrl: imageUrl,
@@ -2,6 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:stream_chat_flutter/src/attachment/attachment_upload_state_builder.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:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:transparent_image/transparent_image.dart';
import 'attachment_title.dart'; import 'attachment_title.dart';
import '../full_screen_media.dart'; import '../full_screen_media.dart';
@@ -51,11 +52,32 @@ class ImageAttachment extends AttachmentWidget {
); );
}, },
network: () { network: () {
final imageUrl = var imageUrl =
attachment.thumbUrl ?? attachment.imageUrl ?? attachment.assetUrl; attachment.thumbUrl ?? attachment.imageUrl ?? attachment.assetUrl;
if (imageUrl == null) { if (imageUrl == null) {
return AttachmentError(size: size); 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( return _buildImageAttachment(
context, context,
CachedNetworkImage( CachedNetworkImage(
@@ -65,9 +87,7 @@ class ImageAttachment extends AttachmentWidget {
return Container( return Container(
width: size?.width, width: size?.width,
height: size?.height, height: size?.height,
child: Center( child: Image.memory(kTransparentImage),
child: CircularProgressIndicator(),
),
); );
}, },
imageUrl: imageUrl, imageUrl: imageUrl,