From 09eafb2c280f9d9da2c3c0e999ecc400da679c40 Mon Sep 17 00:00:00 2001 From: "Dr.Blank" Date: Sun, 6 Oct 2024 05:45:14 -0400 Subject: [PATCH] fix: content behind miniplayer not visible (#53) --- .../item_viewer/view/library_item_page.dart | 6 ++---- lib/features/player/providers/player_form.dart | 18 ++++++++++++++++++ .../player/providers/player_form.g.dart | 15 +++++++++++++++ .../view/mini_player_bottom_padding.dart | 16 ++++++++++++++++ lib/features/you/view/server_manager.dart | 4 ++++ lib/features/you/view/you_page.dart | 2 ++ lib/settings/view/simple_settings_page.dart | 2 ++ 7 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 lib/features/player/view/mini_player_bottom_padding.dart diff --git a/lib/features/item_viewer/view/library_item_page.dart b/lib/features/item_viewer/view/library_item_page.dart index 9e98003..53db17e 100644 --- a/lib/features/item_viewer/view/library_item_page.dart +++ b/lib/features/item_viewer/view/library_item_page.dart @@ -6,7 +6,7 @@ import 'package:flutter_animate/flutter_animate.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:vaani/api/library_item_provider.dart'; import 'package:vaani/features/item_viewer/view/library_item_sliver_app_bar.dart'; -import 'package:vaani/features/player/providers/player_form.dart'; +import 'package:vaani/features/player/view/mini_player_bottom_padding.dart'; import 'package:vaani/router/models/library_item_extras.dart'; import 'package:vaani/shared/widgets/expandable_description.dart'; @@ -56,9 +56,7 @@ class LibraryItemPage extends HookConsumerWidget { child: LibraryItemDescription(id: itemId), ), // a padding at the bottom to make sure the last item is not hidden by mini player - const SliverToBoxAdapter( - child: SizedBox(height: playerMinHeight), - ), + const SliverToBoxAdapter(child: MiniPlayerBottomPadding()), ], ), ), diff --git a/lib/features/player/providers/player_form.dart b/lib/features/player/providers/player_form.dart index 975f47f..b4e2f2e 100644 --- a/lib/features/player/providers/player_form.dart +++ b/lib/features/player/providers/player_form.dart @@ -6,6 +6,7 @@ import 'package:flutter/widgets.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:miniplayer/miniplayer.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:vaani/features/player/providers/audiobook_player.dart'; part 'player_form.g.dart'; @@ -60,3 +61,20 @@ double playerHeight( } final audioBookMiniplayerController = MiniplayerController(); + +@Riverpod(keepAlive: true) +bool isPlayerActive( + IsPlayerActiveRef ref, +) { + try { + final player = ref.watch(audiobookPlayerProvider); + if (player.book != null) { + return true; + } else { + final playerHeight = ref.watch(playerHeightProvider); + return playerHeight < playerMinHeight; + } + } catch (e) { + return false; + } +} diff --git a/lib/features/player/providers/player_form.g.dart b/lib/features/player/providers/player_form.g.dart index b3b73d9..5e8d071 100644 --- a/lib/features/player/providers/player_form.g.dart +++ b/lib/features/player/providers/player_form.g.dart @@ -38,5 +38,20 @@ final playerHeightProvider = Provider.internal( ); typedef PlayerHeightRef = ProviderRef; +String _$isPlayerActiveHash() => r'147e13cd7fd6fd3823623557ce4f300dc15b6fe6'; + +/// See also [isPlayerActive]. +@ProviderFor(isPlayerActive) +final isPlayerActiveProvider = Provider.internal( + isPlayerActive, + name: r'isPlayerActiveProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$isPlayerActiveHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef IsPlayerActiveRef = ProviderRef; // ignore_for_file: type=lint // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/features/player/view/mini_player_bottom_padding.dart b/lib/features/player/view/mini_player_bottom_padding.dart new file mode 100644 index 0000000..c403361 --- /dev/null +++ b/lib/features/player/view/mini_player_bottom_padding.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:vaani/features/player/providers/player_form.dart'; + +class MiniPlayerBottomPadding extends HookConsumerWidget { + const MiniPlayerBottomPadding({super.key}); + @override + Widget build(BuildContext context, WidgetRef ref) { + return AnimatedSize( + duration: const Duration(milliseconds: 200), + child: ref.watch(isPlayerActiveProvider) + ? const SizedBox(height: playerMinHeight + 8) + : const SizedBox.shrink(), + ); + } +} diff --git a/lib/features/you/view/server_manager.dart b/lib/features/you/view/server_manager.dart index 8a385f2..6d198a4 100644 --- a/lib/features/you/view/server_manager.dart +++ b/lib/features/you/view/server_manager.dart @@ -5,6 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:vaani/api/api_provider.dart'; import 'package:vaani/api/authenticated_user_provider.dart'; import 'package:vaani/api/server_provider.dart'; +import 'package:vaani/features/player/view/mini_player_bottom_padding.dart'; import 'package:vaani/main.dart'; import 'package:vaani/models/error_response.dart'; import 'package:vaani/router/router.dart'; @@ -260,6 +261,9 @@ class ServerManagerPage extends HookConsumerWidget { }, ), ), + + MiniPlayerBottomPadding(), + ], ), ), diff --git a/lib/features/you/view/you_page.dart b/lib/features/you/view/you_page.dart index 11fa89d..c15e80f 100644 --- a/lib/features/you/view/you_page.dart +++ b/lib/features/you/view/you_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:vaani/api/api_provider.dart'; +import 'package:vaani/features/player/view/mini_player_bottom_padding.dart'; import 'package:vaani/router/router.dart'; import 'package:vaani/settings/constants.dart'; import 'package:vaani/shared/utils.dart'; @@ -136,6 +137,7 @@ class YouPage extends HookConsumerWidget { ), ), ), + SliverToBoxAdapter(child: MiniPlayerBottomPadding()), ], ), ); diff --git a/lib/settings/view/simple_settings_page.dart b/lib/settings/view/simple_settings_page.dart index 471b022..ea9107d 100644 --- a/lib/settings/view/simple_settings_page.dart +++ b/lib/settings/view/simple_settings_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_settings_ui/flutter_settings_ui.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:vaani/features/player/view/mini_player_bottom_padding.dart'; class SimpleSettingsPage extends HookConsumerWidget { const SimpleSettingsPage({ @@ -48,6 +49,7 @@ class SimpleSettingsPage extends HookConsumerWidget { ), // some padding at the bottom const SliverPadding(padding: EdgeInsets.only(bottom: 20)), + SliverToBoxAdapter(child: MiniPlayerBottomPadding()), ], ), );