mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-02-16 14:29:35 +00:00
55 lines
1.8 KiB
Dart
55 lines
1.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:vaani/features/player/core/player_status.dart';
|
|
import 'package:vaani/features/player/providers/player_status_provider.dart';
|
|
import 'package:vaani/features/player/providers/audiobook_player.dart';
|
|
|
|
class AudiobookPlayerPlayPauseButton extends HookConsumerWidget {
|
|
const AudiobookPlayerPlayPauseButton({
|
|
super.key,
|
|
this.iconSize = 48.0,
|
|
});
|
|
|
|
final double iconSize;
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final playerStatus =
|
|
ref.watch(playerStatusProvider.select((v) => v.playStatus));
|
|
|
|
return PlatformIconButton(
|
|
icon: _getIcon(playerStatus, context),
|
|
onPressed: () => _actionButtonPressed(playerStatus, ref),
|
|
);
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|