♻️ Refactor video player

This commit is contained in:
2024-08-17 19:02:57 +08:00
parent 3bea3a114a
commit f0e6bd64f4
10 changed files with 98 additions and 235 deletions

View File

@ -1,14 +1,14 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:get/get.dart';
import 'package:media_kit/media_kit.dart';
import 'package:media_kit_video/media_kit_video.dart';
import 'package:solian/models/attachment.dart';
import 'package:solian/platform.dart';
import 'package:solian/services.dart';
import 'package:solian/widgets/sized_container.dart';
import 'package:url_launcher/url_launcher_string.dart';
import 'package:video_player/video_player.dart';
class AttachmentItem extends StatefulWidget {
final String parentId;
@ -231,17 +231,22 @@ class _AttachmentItemVideo extends StatefulWidget {
}
class _AttachmentItemVideoState extends State<_AttachmentItemVideo> {
late final _player = Player(
configuration: const PlayerConfiguration(logLevel: MPVLogLevel.error),
);
late final _controller = VideoController(_player);
VideoPlayerController? _playerController;
ChewieController? _chewieController;
bool _showContent = false;
Future<void> _startLoad() async {
await _player.open(
Media(ServiceFinder.buildUrl('files', '/attachments/${widget.item.id}')),
play: false,
final ratio = widget.item.metadata?['ratio'] ?? 16 / 9;
_playerController = VideoPlayerController.networkUrl(
Uri.parse(
ServiceFinder.buildUrl('files', '/attachments/${widget.item.id}'),
),
);
_playerController!.initialize();
_chewieController = ChewieController(
aspectRatio: ratio,
videoPlayerController: _playerController!,
);
setState(() => _showContent = true);
}
@ -254,10 +259,17 @@ class _AttachmentItemVideoState extends State<_AttachmentItemVideo> {
}
}
@override
void dispose() {
_playerController?.dispose();
_chewieController?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final ratio = widget.item.metadata?['ratio'] ?? 16 / 9;
if (!_showContent) {
if (!_showContent || _chewieController == null) {
return GestureDetector(
child: AspectRatio(
aspectRatio: ratio,
@ -295,15 +307,8 @@ class _AttachmentItemVideoState extends State<_AttachmentItemVideo> {
);
}
return Video(
aspectRatio: ratio,
controller: _controller,
return Chewie(
controller: _chewieController!,
);
}
@override
void dispose() {
_player.dispose();
super.dispose();
}
}