Skip to content

Commit 28bdfbd

Browse files
committed
feat: Implement tooltip for the playback controller bar
1 parent e565da0 commit 28bdfbd

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

lib/widgets/playback_controller/constants/controller_items.dart

+27-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class ControllerEntry {
3030
final IconData Function(BuildContext context) icon;
3131
final String title;
3232
final String subtitle;
33+
final String Function(BuildContext context) tooltipBuilder;
3334
final Widget Function(BuildContext context, List<Shadow>? shadows)
3435
controllerButtonBuilder;
3536
final Future<MenuFlyoutItem> Function(BuildContext context)
@@ -42,6 +43,7 @@ class ControllerEntry {
4243
required this.icon,
4344
required this.title,
4445
required this.subtitle,
46+
required this.tooltipBuilder,
4547
required this.controllerButtonBuilder,
4648
required this.flyoutEntryBuilder,
4749
required this.shortcuts,
@@ -67,6 +69,7 @@ final controllerItems = [
6769

6870
playPrevious();
6971
},
72+
tooltipBuilder: (context) => "Previous",
7073
controllerButtonBuilder: (context, shadows) {
7174
final statusProvider =
7275
Provider.of<PlaybackStatusProvider>(context, listen: false);
@@ -131,6 +134,13 @@ final controllerItems = [
131134
playPlay();
132135
}
133136
},
137+
tooltipBuilder: (context) {
138+
final statusProvider =
139+
Provider.of<PlaybackStatusProvider>(context, listen: false);
140+
final status = statusProvider.playbackStatus;
141+
142+
return status?.state == "Playing" ? "Pause" : "Play";
143+
},
134144
controllerButtonBuilder: (context, shadows) {
135145
final statusProvider =
136146
Provider.of<PlaybackStatusProvider>(context, listen: false);
@@ -183,6 +193,7 @@ final controllerItems = [
183193

184194
playNext();
185195
},
196+
tooltipBuilder: (context) => "Next",
186197
controllerButtonBuilder: (context, shadows) {
187198
final statusProvider =
188199
Provider.of<PlaybackStatusProvider>(context, listen: false);
@@ -211,7 +222,7 @@ final controllerItems = [
211222
? null
212223
: () {
213224
context.pop();
214-
playPrevious();
225+
playNext();
215226
},
216227
);
217228
},
@@ -231,6 +242,7 @@ final controllerItems = [
231242
subtitle: "Adjust the volume",
232243
shortcuts: [],
233244
onShortcut: null,
245+
tooltipBuilder: (context) => "Volume",
234246
controllerButtonBuilder: (context, shadows) => VolumeButton(
235247
shadows: shadows,
236248
),
@@ -287,6 +299,16 @@ final controllerItems = [
287299
},
288300
title: "Playback Mode",
289301
subtitle: "Switch between sequential, repeat, or shuffle",
302+
tooltipBuilder: (context) {
303+
final statusProvider =
304+
Provider.of<PlaybackStatusProvider>(context, listen: false);
305+
final status = statusProvider.playbackStatus;
306+
307+
final currentMode =
308+
PlaybackModeExtension.fromValue(status?.playbackMode ?? 0);
309+
310+
return modeToLabel(currentMode);
311+
},
290312
controllerButtonBuilder: (context, shadows) => PlaybackModeButton(
291313
shadows: shadows,
292314
),
@@ -364,6 +386,7 @@ final controllerItems = [
364386
onShortcut: (context) {
365387
showPlayQueueDialog(context);
366388
},
389+
tooltipBuilder: (context) => "Playlist",
367390
controllerButtonBuilder: (context, shadows) => QueueButton(
368391
shadows: shadows,
369392
),
@@ -391,6 +414,7 @@ final controllerItems = [
391414
subtitle: "Content below will be hidden in the others list",
392415
shortcuts: [],
393416
onShortcut: null,
417+
tooltipBuilder: (context) => "Hidden",
394418
controllerButtonBuilder: (context, shadows) => Container(),
395419
flyoutEntryBuilder: (context) async {
396420
return MenuFlyoutItem(
@@ -409,6 +433,7 @@ final controllerItems = [
409433
onShortcut: (context) {
410434
showCoverArtWall(context);
411435
},
436+
tooltipBuilder: (context) => "Cover Wall",
412437
controllerButtonBuilder: (context, shadows) => CoverWallButton(
413438
shadows: shadows,
414439
),
@@ -449,6 +474,7 @@ final controllerItems = [
449474

450475
fullScreen.setFullScreen(!fullScreen.isFullScreen);
451476
},
477+
tooltipBuilder: (context) => "Fullscreen",
452478
controllerButtonBuilder: (context, shadows) => FullScreenButton(
453479
shadows: shadows,
454480
),

lib/widgets/playback_controller/controller_buttons.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ class _ControllerButtonsState extends State<ControllerButtons> {
8282
for (final entry in (miniLayout && !coverArtWallLayout)
8383
? miniEntries
8484
: visibleEntries)
85-
entry.controllerButtonBuilder(context, null),
85+
Tooltip(
86+
message: entry.tooltipBuilder(context),
87+
child: entry.controllerButtonBuilder(context, null)),
8688
if (hiddenEntries.isNotEmpty)
8789
FlyoutTarget(
8890
controller: menuController,

0 commit comments

Comments
 (0)