[Async Attachment Upload] Initial implementation

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-02-16 21:21:15 +05:30
parent 628542f99b
commit 0a6948cf32
54 changed files with 2561 additions and 1328 deletions
@@ -0,0 +1,87 @@
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:video_thumbnail/video_thumbnail.dart';
import 'stream_svg_icon.dart';
import 'video_service.dart';
class VideoThumbnailImage extends StatefulWidget {
final String video;
final double width;
final double height;
final BoxFit fit;
final ImageFormat format;
final Widget Function(BuildContext, Object) errorBuilder;
final WidgetBuilder placeholderBuilder;
const VideoThumbnailImage({
Key key,
@required this.video,
this.width,
this.height,
this.fit,
this.format = ImageFormat.PNG,
this.errorBuilder,
this.placeholderBuilder,
}) : super(key: key);
@override
_VideoThumbnailImageState createState() => _VideoThumbnailImageState();
}
class _VideoThumbnailImageState extends State<VideoThumbnailImage> {
Future<Uint8List> thumbnailFuture;
@override
void initState() {
thumbnailFuture = VideoService.generateVideoThumbnail(
video: widget.video,
imageFormat: widget.format,
);
super.initState();
}
@override
void didUpdateWidget(covariant VideoThumbnailImage oldWidget) {
if (oldWidget.video != widget.video || oldWidget.format != widget.format) {
thumbnailFuture = VideoService.generateVideoThumbnail(
video: widget.video,
imageFormat: widget.format,
);
}
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
return FutureBuilder<Uint8List>(
future: thumbnailFuture,
builder: (context, snapshot) {
if (snapshot.hasError) {
if (widget.errorBuilder != null) {
return widget.errorBuilder(context, snapshot.error);
}
return Center(child: StreamSvgIcon.error());
}
if (!snapshot.hasData) {
if (widget.placeholderBuilder != null) {
return widget.placeholderBuilder(context);
}
return Image.asset(
'images/placeholder.png',
package: 'stream_chat_flutter',
fit: widget.fit,
);
}
final data = snapshot.data;
return Image.memory(
data,
fit: widget.fit,
height: widget.height,
width: widget.width,
);
},
);
}
}