Merge branch 'hotfix/video' of /Users/deven9852/Stream/stream-chat-flutter with conflicts.

This commit is contained in:
Deven Joshi
2021-02-01 21:35:12 +05:30
parent 711c20b967
commit a1045acfc9
5 changed files with 368 additions and 65 deletions
@@ -61,9 +61,14 @@ class _FullScreenMediaState extends State<FullScreenMedia>
.where((element) => element.type == 'video')
.toList()
.forEach((element) {
videoPackages.add(VideoPackage(context, element, () {
setState(() {});
}));
videoPackages.add(VideoPackage(
context,
element,
() {
setState(() {});
},
showControls: true,
));
});
}
@@ -233,15 +238,18 @@ class VideoPackage {
bool initialised = false;
VoidCallback onInit;
BuildContext context;
bool showControls;
///
VideoPackage(this.context, Attachment attachment, this.onInit) {
VideoPackage(this.context, Attachment attachment, this.onInit,
{this.showControls = false}) {
_videoPlayerController = VideoPlayerController.network(attachment.assetUrl);
_videoPlayerController.initialize().whenComplete(() {
initialised = true;
_chewieController = ChewieController(
videoPlayerController: _videoPlayerController,
autoInitialize: false,
autoInitialize: true,
showControls: showControls,
aspectRatio: _videoPlayerController.value.aspectRatio,
);
onInit();
@@ -239,6 +239,8 @@ class _MessageListViewState extends State<MessageListView> {
MessageListController _messageListController = MessageListController();
Map<String, VideoPackage> videoPackages = {};
@override
Widget build(BuildContext context) {
return MessageListCore(
@@ -776,6 +778,7 @@ class _MessageListViewState extends State<MessageListView> {
break;
}
},
videoPackages: videoPackages,
);
}
@@ -936,6 +939,7 @@ class _MessageListViewState extends State<MessageListView> {
break;
}
},
videoPackages: videoPackages,
);
if (!message.isDeleted && !message.isSystem && !message.isEphemeral) {
@@ -142,6 +142,8 @@ class MessageWidget extends StatefulWidget {
/// Function called when quotedMessage is tapped
final OnQuotedMessageTap onQuotedMessageTap;
Map<String, VideoPackage> videoPackages = {};
///
MessageWidget({
Key key,
@@ -190,6 +192,7 @@ class MessageWidget extends StatefulWidget {
this.attachmentPadding = EdgeInsets.zero,
this.allRead = false,
this.onQuotedMessageTap,
this.videoPackages,
}) : attachmentBuilders = {
'image': (context, message, attachment) {
return ImageAttachment(
@@ -832,6 +835,41 @@ class _MessageWidgetState extends State<MessageWidget> {
children: widget.message.attachments
?.where((element) => element.ogScrapeUrl == null)
?.map((attachment) {
if (attachment.type == 'video') {
VideoPackage package;
if (widget.videoPackages == null) {
package = VideoPackage(context, attachment, () {});
} else {
package = widget?.videoPackages[
'${widget.message.id}${widget.message.attachments.indexOf(attachment)}'] ??
VideoPackage(context, attachment, () {});
}
if (widget.videoPackages != null) {
widget.videoPackages[
'${widget.message.id}${widget.message.attachments.indexOf(attachment)}'] =
package;
}
return Transform(
transform: Matrix4.rotationY(widget.reverse ? pi : 0),
alignment: Alignment.center,
child: VideoAttachment(
attachment: attachment,
messageTheme: widget.messageTheme,
size: Size(
MediaQuery.of(context).size.width * 0.8,
MediaQuery.of(context).size.height * 0.3,
),
message: widget.message,
onShowMessage: widget.onShowMessage,
onReturnAction: widget.onReturnAction,
videoPackage: package,
),
);
}
final attachmentBuilder =
widget.attachmentBuilders[attachment.type];
@@ -16,11 +16,13 @@ class VideoAttachment extends StatefulWidget {
final Message message;
final ShowMessageCallback onShowMessage;
final ValueChanged<ReturnActionType> onReturnAction;
final VideoPackage videoPackage;
VideoAttachment({
Key key,
@required this.attachment,
@required this.messageTheme,
this.videoPackage,
this.message,
this.size,
this.onShowMessage,
@@ -32,13 +34,21 @@ class VideoAttachment extends StatefulWidget {
}
class _VideoAttachmentState extends State<VideoAttachment> {
ChewieController _chewieController;
VideoPlayerController _videoPlayerController;
bool initialized = false;
@override
void initState() {
super.initState();
widget.videoPackage.onInit = () {
setState(() {
initialized = true;
});
};
}
@override
Widget build(BuildContext context) {
if (!initialized) {
if (!widget.videoPackage.initialised) {
return Container(
height: widget.size?.height ?? 100,
width: widget.size?.width ?? 100,
@@ -47,43 +57,6 @@ class _VideoAttachmentState extends State<VideoAttachment> {
),
);
}
_chewieController = ChewieController(
videoPlayerController: _videoPlayerController,
autoInitialize: true,
showControls: false,
aspectRatio: _videoPlayerController.value.aspectRatio,
errorBuilder: (_, e) {
if (widget.attachment.thumbUrl != null) {
return Stack(
children: <Widget>[
Container(
height: widget.size?.height,
width: widget.size?.width,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.cover,
image: CachedNetworkImageProvider(
widget.attachment.thumbUrl,
),
),
),
),
if (widget.attachment.titleLink != null)
Material(
color: Colors.transparent,
child: InkWell(
onTap: () =>
launchURL(context, widget.attachment.titleLink),
),
),
],
);
}
return AttachmentError(
attachment: widget.attachment,
size: widget.size,
);
});
return GestureDetector(
onTap: () async {
@@ -123,7 +96,7 @@ class _VideoAttachmentState extends State<VideoAttachment> {
child: Stack(
children: <Widget>[
Chewie(
controller: _chewieController,
controller: widget.videoPackage.chewieController,
),
Positioned.fill(
child: Center(
@@ -153,23 +126,4 @@ class _VideoAttachmentState extends State<VideoAttachment> {
),
);
}
@override
void initState() {
super.initState();
_videoPlayerController =
VideoPlayerController.network(widget.attachment.assetUrl);
_videoPlayerController.initialize().whenComplete(() {
setState(() {
initialized = true;
});
});
}
@override
void dispose() {
_videoPlayerController?.dispose();
_chewieController?.dispose();
super.dispose();
}
}