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 createState() => _VideoWidgetNewState(); } class _VideoWidgetNewState extends State { // 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(() {}); } }); } } }