fix: content behind miniplayer not visible (#53)

This commit is contained in:
Dr.Blank 2024-10-06 05:45:14 -04:00 committed by GitHub
parent e8903081b7
commit 09eafb2c28
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 59 additions and 4 deletions

View file

@ -6,7 +6,7 @@ import 'package:flutter_animate/flutter_animate.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:vaani/api/library_item_provider.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/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/router/models/library_item_extras.dart';
import 'package:vaani/shared/widgets/expandable_description.dart'; import 'package:vaani/shared/widgets/expandable_description.dart';
@ -56,9 +56,7 @@ class LibraryItemPage extends HookConsumerWidget {
child: LibraryItemDescription(id: itemId), child: LibraryItemDescription(id: itemId),
), ),
// a padding at the bottom to make sure the last item is not hidden by mini player // a padding at the bottom to make sure the last item is not hidden by mini player
const SliverToBoxAdapter( const SliverToBoxAdapter(child: MiniPlayerBottomPadding()),
child: SizedBox(height: playerMinHeight),
),
], ],
), ),
), ),

View file

@ -6,6 +6,7 @@ import 'package:flutter/widgets.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:miniplayer/miniplayer.dart'; import 'package:miniplayer/miniplayer.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:vaani/features/player/providers/audiobook_player.dart';
part 'player_form.g.dart'; part 'player_form.g.dart';
@ -60,3 +61,20 @@ double playerHeight(
} }
final audioBookMiniplayerController = MiniplayerController(); 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;
}
}

View file

@ -38,5 +38,20 @@ final playerHeightProvider = Provider<double>.internal(
); );
typedef PlayerHeightRef = ProviderRef<double>; typedef PlayerHeightRef = ProviderRef<double>;
String _$isPlayerActiveHash() => r'147e13cd7fd6fd3823623557ce4f300dc15b6fe6';
/// See also [isPlayerActive].
@ProviderFor(isPlayerActive)
final isPlayerActiveProvider = Provider<bool>.internal(
isPlayerActive,
name: r'isPlayerActiveProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$isPlayerActiveHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef IsPlayerActiveRef = ProviderRef<bool>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member

View file

@ -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(),
);
}
}

View file

@ -5,6 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:vaani/api/api_provider.dart'; import 'package:vaani/api/api_provider.dart';
import 'package:vaani/api/authenticated_user_provider.dart'; import 'package:vaani/api/authenticated_user_provider.dart';
import 'package:vaani/api/server_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/main.dart';
import 'package:vaani/models/error_response.dart'; import 'package:vaani/models/error_response.dart';
import 'package:vaani/router/router.dart'; import 'package:vaani/router/router.dart';
@ -260,6 +261,9 @@ class ServerManagerPage extends HookConsumerWidget {
}, },
), ),
), ),
MiniPlayerBottomPadding(),
], ],
), ),
), ),

View file

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:vaani/api/api_provider.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/router/router.dart';
import 'package:vaani/settings/constants.dart'; import 'package:vaani/settings/constants.dart';
import 'package:vaani/shared/utils.dart'; import 'package:vaani/shared/utils.dart';
@ -136,6 +137,7 @@ class YouPage extends HookConsumerWidget {
), ),
), ),
), ),
SliverToBoxAdapter(child: MiniPlayerBottomPadding()),
], ],
), ),
); );

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_settings_ui/flutter_settings_ui.dart'; import 'package:flutter_settings_ui/flutter_settings_ui.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:vaani/features/player/view/mini_player_bottom_padding.dart';
class SimpleSettingsPage extends HookConsumerWidget { class SimpleSettingsPage extends HookConsumerWidget {
const SimpleSettingsPage({ const SimpleSettingsPage({
@ -48,6 +49,7 @@ class SimpleSettingsPage extends HookConsumerWidget {
), ),
// some padding at the bottom // some padding at the bottom
const SliverPadding(padding: EdgeInsets.only(bottom: 20)), const SliverPadding(padding: EdgeInsets.only(bottom: 20)),
SliverToBoxAdapter(child: MiniPlayerBottomPadding()),
], ],
), ),
); );