gallery_picker/lib/user_widgets/thumbnail_media.dart

54 lines
2.0 KiB
Dart
Raw Normal View History

2022-12-29 08:45:28 +03:00
import 'package:flutter/material.dart';
import '/models/media_file.dart';
import 'package:photo_gallery/photo_gallery.dart';
import 'package:transparent_image/transparent_image.dart';
class ThumbnailMedia extends StatelessWidget {
final MediaFile media;
final bool noIcon;
final Widget Function(MediaFile media,BuildContext context)? onErrorBuilder;
const ThumbnailMedia({super.key, required this.media, this.onErrorBuilder,this.noIcon=false});
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: media.thumbnail == null ? media.getThumbnail() : null,
builder: (context, snapshot) {
return Stack(
fit: StackFit.passthrough,
children: [
if (media.thumbnailFailed && onErrorBuilder == null)
Icon(
media.type == MediumType.image
? Icons.image_not_supported
: Icons.videocam_off_rounded,
color: Colors.grey,
)
else if (media.thumbnailFailed && onErrorBuilder == null)
onErrorBuilder!(media,context)
else if (media.thumbnail != null)
FadeInImage(
fadeInDuration: const Duration(milliseconds: 200),
fit: BoxFit.cover,
placeholder: MemoryImage(kTransparentImage),
image: MemoryImage(media.thumbnail!),
)
else
const SizedBox(),
if (media.thumbnail != null && !media.thumbnailFailed && !noIcon)
Positioned(
bottom: 10,
left: 10,
child: Icon(
media.medium.mediumType == MediumType.video
? Icons.video_camera_back
: null,
color: Colors.white,
size: 20,
)),
],
);
});
}
}