ente/lib/ui/viewer/file/video_widget_new.dart
2023-08-31 06:29:46 +05:30

76 lines
2 KiB
Dart

import "package:flutter/material.dart";
import "package:media_kit/media_kit.dart";
import "package:media_kit_video/media_kit_video.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/models/file/extensions/file_props.dart";
import "package:photos/models/file/file.dart";
import "package:photos/services/files_service.dart";
import "package:photos/utils/dialog_util.dart";
import "package:photos/utils/file_util.dart";
class VideoWidgetNew extends StatefulWidget {
final EnteFile file;
const VideoWidgetNew(this.file, {super.key});
@override
State<VideoWidgetNew> createState() => _VideoWidgetNewState();
}
class _VideoWidgetNewState extends State<VideoWidgetNew> {
// Create a [Player] to control playback.
late final player = Player();
// Create a [VideoController] to handle video output from [Player].
late final controller = VideoController(player);
@override
void initState() {
super.initState();
if (widget.file.isRemoteFile) {
_loadNetworkVideo();
_setFileSizeIfNull();
}
}
@override
void dispose() {
player.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Center(
child: SizedBox(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.width * 9.0 / 16.0,
child: Video(controller: controller),
),
);
}
void _loadNetworkVideo() {
getFileFromServer(
widget.file,
).then((file) {
if (file != null) {
player.open(Media(file.path));
}
}).onError((error, stackTrace) {
showErrorDialog(context, "Error", S.of(context).failedToDownloadVideo);
});
}
void _setFileSizeIfNull() {
if (widget.file.fileSize == null && widget.file.canEditMetaInfo) {
FilesService.instance
.getFileSize(widget.file.uploadedFileID!)
.then((value) {
widget.file.fileSize = value;
if (mounted) {
setState(() {});
}
});
}
}
}