From 2d7991d1cbc130871755b59a37aef2c9334ead94 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Sun, 8 Dec 2024 19:35:13 +0100 Subject: [PATCH] fix remains in full screen when opening a new episode --- lib/modules/anime/anime_player_view.dart | 98 +++++++++++------------- 1 file changed, 44 insertions(+), 54 deletions(-) diff --git a/lib/modules/anime/anime_player_view.dart b/lib/modules/anime/anime_player_view.dart index 33f95eb..bd97590 100644 --- a/lib/modules/anime/anime_player_view.dart +++ b/lib/modules/anime/anime_player_view.dart @@ -27,9 +27,10 @@ import 'package:media_kit/media_kit.dart'; import 'package:media_kit_video/media_kit_video.dart'; import 'package:media_kit_video/media_kit_video_controls/src/controls/extensions/duration.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:window_manager/window_manager.dart'; import 'package:path/path.dart' as path; +bool _isDesktop = Platform.isMacOS || Platform.isLinux || Platform.isWindows; + class AnimePlayerView extends riv.ConsumerStatefulWidget { final Chapter episode; const AnimePlayerView({super.key, required this.episode}); @@ -40,8 +41,12 @@ class AnimePlayerView extends riv.ConsumerStatefulWidget { class _AnimePlayerViewState extends riv.ConsumerState { List _infoHashList = []; + bool desktopFullScreenPlayer = false; @override void dispose() { + if (_isDesktop) { + setFullScreen(value: desktopFullScreenPlayer); + } for (var infoHash in _infoHashList) { MTorrentServer().removeTorrent(infoHash); } @@ -50,6 +55,14 @@ class _AnimePlayerViewState extends riv.ConsumerState { super.dispose(); } + @override + initState() { + super.initState(); + if (_isDesktop) { + setFullScreen(value: ref.read(fullScreenPlayerStateProvider)); + } + } + @override Widget build(BuildContext context) { final serversData = @@ -81,7 +94,10 @@ class _AnimePlayerViewState extends riv.ConsumerState { episode: widget.episode, videos: videos, isLocal: isLocal, - isTorrent: infoHashList.isNotEmpty); + isTorrent: infoHashList.isNotEmpty, + desktopFullScreenPlayer: (value) { + desktopFullScreenPlayer = value; + }); }, error: (error, stackTrace) => Scaffold( backgroundColor: Theme.of(context).scaffoldBackgroundColor, @@ -126,12 +142,14 @@ class AnimeStreamPage extends riv.ConsumerStatefulWidget { final Chapter episode; final bool isLocal; final bool isTorrent; + final void Function(bool) desktopFullScreenPlayer; const AnimeStreamPage( {super.key, required this.isLocal, required this.videos, required this.episode, - required this.isTorrent}); + required this.isTorrent, + required this.desktopFullScreenPlayer}); @override riv.ConsumerState createState() => _AnimeStreamPageState(); @@ -207,25 +225,22 @@ class _AnimeStreamPageState extends riv.ConsumerState ); late final StreamSubscription _completed = - _player.stream.completed.listen( - (val) async { - if (_streamController.getEpisodeIndex().$1 != 0 && val == true) { - if (isDesktop) { - final isFullScreen = await windowManager.isFullScreen(); - if (isFullScreen) { - await setFullScreen(value: false); - } - } - if (mounted) { - pushReplacementMangaReaderView( - context: context, - chapter: _streamController.getNextEpisode(), - ); - } + _player.stream.completed.listen((val) { + if (_streamController.getEpisodeIndex().$1 != 0 && val == true) { + if (mounted) { + pushToNewEpisode(context, _streamController.getNextEpisode()); } - }, - ); + } + }); + void pushToNewEpisode(BuildContext context, Chapter episode) { + widget.desktopFullScreenPlayer.call(true); + if (context.mounted) { + pushReplacementMangaReaderView(context: context, chapter: episode); + } + } + + bool isFFF = false; @override void initState() { _currentPositionSub; @@ -249,9 +264,6 @@ class _AnimeStreamPageState extends riv.ConsumerState _initAniSkip(); }, ); - if (isDesktop) { - setFullScreen(value: ref.read(fullScreenPlayerStateProvider)); - } super.initState(); } @@ -294,7 +306,6 @@ class _AnimeStreamPageState extends riv.ConsumerState }); } - bool isDesktop = Platform.isMacOS || Platform.isLinux || Platform.isWindows; @override void dispose() { _setCurrentPosition(true); @@ -302,9 +313,7 @@ class _AnimeStreamPageState extends riv.ConsumerState _currentPositionSub.cancel(); _currentTotalDurationSub.cancel(); _completed.cancel(); - if (isDesktop) { - setFullScreen(value: false); - } else { + if (!_isDesktop) { _setLandscapeMode(false); } super.dispose(); @@ -745,18 +754,9 @@ class _AnimeStreamPageState extends riv.ConsumerState children: [ if (hasPrevEpisode) IconButton( - onPressed: () async { - if (isDesktop) { - final isFullScreen = await windowManager.isFullScreen(); - if (isFullScreen) { - await setFullScreen(value: false); - } - } - if (context.mounted) { - pushReplacementMangaReaderView( - context: context, - chapter: _streamController.getPrevEpisode()); - } + onPressed: () { + pushToNewEpisode( + context, _streamController.getPrevEpisode()); }, icon: const Icon( Icons.skip_previous, @@ -769,18 +769,8 @@ class _AnimeStreamPageState extends riv.ConsumerState if (hasNextEpisode) IconButton( onPressed: () async { - if (isDesktop) { - final isFullScreen = await windowManager.isFullScreen(); - if (isFullScreen) { - await setFullScreen(value: false); - } - } - if (context.mounted) { - pushReplacementMangaReaderView( - context: context, - chapter: _streamController.getNextEpisode(), - ); - } + pushToNewEpisode( + context, _streamController.getNextEpisode()); }, icon: const Icon(Icons.skip_next, color: Colors.white), ), @@ -915,7 +905,7 @@ class _AnimeStreamPageState extends riv.ConsumerState builder: (context, fullScreen, _) { return Padding( padding: EdgeInsets.only( - top: !isDesktop && !fullScreen + top: !_isDesktop && !fullScreen ? MediaQuery.of(context).padding.top : 0), child: Row( @@ -923,7 +913,7 @@ class _AnimeStreamPageState extends riv.ConsumerState BackButton( color: Colors.white, onPressed: () async { - if (isDesktop) { + if (_isDesktop) { if (fullScreen) { setFullScreen(value: false); } else { @@ -1050,7 +1040,7 @@ class _AnimeStreamPageState extends riv.ConsumerState visible: false, style: subtileTextStyle(ref)), fit: fit, key: _key, - controls: (state) => isDesktop + controls: (state) => _isDesktop ? DesktopControllerWidget( videoController: _controller, topButtonBarWidget: _topButtonBar(context),