mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2025-12-21 02:19:30 +00:00
97 lines
3.2 KiB
Dart
97 lines
3.2 KiB
Dart
|
|
import 'package:flutter/material.dart';
|
||
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||
|
|
import 'package:miniplayer/miniplayer.dart';
|
||
|
|
import 'package:whispering_pages/features/player/providers/audiobook_player.dart';
|
||
|
|
import 'package:whispering_pages/features/player/view/audiobook_player.dart';
|
||
|
|
|
||
|
|
class PlayerWhenMinimized extends HookConsumerWidget {
|
||
|
|
const PlayerWhenMinimized({
|
||
|
|
super.key,
|
||
|
|
required this.maxImgSize,
|
||
|
|
required this.imgWidget,
|
||
|
|
required this.elementOpacity,
|
||
|
|
required this.playPauseButton,
|
||
|
|
required this.progressIndicatorHeight,
|
||
|
|
required this.progressIndicator,
|
||
|
|
});
|
||
|
|
|
||
|
|
final double maxImgSize;
|
||
|
|
final Widget imgWidget;
|
||
|
|
final double elementOpacity;
|
||
|
|
final IconButton playPauseButton;
|
||
|
|
final double progressIndicatorHeight;
|
||
|
|
final Widget progressIndicator;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
||
|
|
final player = ref.watch(audiobookPlayerProvider);
|
||
|
|
return Column(
|
||
|
|
children: [
|
||
|
|
Expanded(
|
||
|
|
child: Row(
|
||
|
|
children: [
|
||
|
|
ConstrainedBox(
|
||
|
|
constraints: BoxConstraints(maxHeight: maxImgSize),
|
||
|
|
child: imgWidget,
|
||
|
|
),
|
||
|
|
Expanded(
|
||
|
|
child: Padding(
|
||
|
|
padding: const EdgeInsets.only(left: 10),
|
||
|
|
child: Opacity(
|
||
|
|
opacity: elementOpacity,
|
||
|
|
child: Column(
|
||
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
||
|
|
mainAxisSize: MainAxisSize.min,
|
||
|
|
children: [
|
||
|
|
Text(
|
||
|
|
player.book?.metadata.title ?? '',
|
||
|
|
style: Theme.of(context)
|
||
|
|
.textTheme
|
||
|
|
.bodyMedium!
|
||
|
|
.copyWith(fontSize: 16),
|
||
|
|
),
|
||
|
|
Text(
|
||
|
|
'audioObject.subtitle',
|
||
|
|
style:
|
||
|
|
Theme.of(context).textTheme.bodyMedium!.copyWith(
|
||
|
|
color: Theme.of(context)
|
||
|
|
.textTheme
|
||
|
|
.bodyMedium!
|
||
|
|
.color!
|
||
|
|
.withOpacity(0.55),
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
),
|
||
|
|
),
|
||
|
|
),
|
||
|
|
IconButton(
|
||
|
|
icon: const Icon(Icons.fullscreen),
|
||
|
|
onPressed: () {
|
||
|
|
controller.animateToHeight(state: PanelState.MAX);
|
||
|
|
},
|
||
|
|
),
|
||
|
|
Padding(
|
||
|
|
padding: const EdgeInsets.only(right: 3),
|
||
|
|
child: Opacity(
|
||
|
|
opacity: elementOpacity,
|
||
|
|
child: playPauseButton,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
),
|
||
|
|
SizedBox(
|
||
|
|
height: progressIndicatorHeight,
|
||
|
|
child: Opacity(
|
||
|
|
opacity: elementOpacity,
|
||
|
|
child: progressIndicator,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|