mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2025-12-06 02:59:28 +00:00
fix: content behind miniplayer not visible (#53)
This commit is contained in:
parent
e8903081b7
commit
09eafb2c28
7 changed files with 59 additions and 4 deletions
|
|
@ -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),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
16
lib/features/player/view/mini_player_bottom_padding.dart
Normal file
16
lib/features/player/view/mini_player_bottom_padding.dart
Normal 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(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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(),
|
||||||
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -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()),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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()),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue