Vaani/lib/features/player/view/widgets/player_player_pause_button.dart

56 lines
1.8 KiB
Dart
Raw Normal View History

2025-11-13 17:53:23 +08:00
import 'package:flutter/material.dart';
2025-11-22 15:54:29 +08:00
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
2025-11-13 17:53:23 +08:00
import 'package:hooks_riverpod/hooks_riverpod.dart';
2025-11-22 15:54:29 +08:00
import 'package:vaani/features/player/core/player_status.dart';
import 'package:vaani/features/player/providers/player_status_provider.dart';
2025-11-19 17:43:04 +08:00
import 'package:vaani/features/player/providers/session_provider.dart';
2025-11-13 17:53:23 +08:00
class AudiobookPlayerPlayPauseButton extends HookConsumerWidget {
const AudiobookPlayerPlayPauseButton({
super.key,
this.iconSize = 48.0,
});
final double iconSize;
@override
Widget build(BuildContext context, WidgetRef ref) {
2025-11-22 15:54:29 +08:00
final playerStatus =
ref.watch(playerStatusProvider.select((v) => v.playStatus));
return PlatformIconButton(
icon: _getIcon(playerStatus, context),
onPressed: () => _actionButtonPressed(playerStatus, ref),
2025-11-13 17:53:23 +08:00
);
2025-11-22 15:54:29 +08:00
}
Widget _getIcon(PlayStatus playerStatus, BuildContext context) {
switch (playerStatus) {
case PlayStatus.playing:
return Icon(size: iconSize, PlatformIcons(context).pause);
case PlayStatus.paused:
return Icon(size: iconSize, PlatformIcons(context).playArrow);
case PlayStatus.loading:
return PlatformCircularProgressIndicator();
default:
return Icon(size: iconSize, PlatformIcons(context).playArrow);
}
}
void _actionButtonPressed(PlayStatus playerStatus, WidgetRef ref) async {
final player = ref.read(playerProvider);
switch (playerStatus) {
case PlayStatus.loading:
break;
case PlayStatus.playing:
await player.pause();
break;
case PlayStatus.completed:
await player.seekInBook(const Duration(seconds: 0));
await player.play();
break;
default:
await player.play();
2025-11-13 17:53:23 +08:00
}
}
}