1
1
import 'package:flutter/services.dart' ;
2
- import 'package:player/utils/api/play_next.dart' ;
3
2
import 'package:provider/provider.dart' ;
4
3
import 'package:fluent_ui/fluent_ui.dart' ;
5
4
import 'package:material_symbols_icons/symbols.dart' ;
6
5
6
+ import '../../../utils/api/play_play.dart' ;
7
7
import '../../../utils/api/play_mode.dart' ;
8
+ import '../../../utils/api/play_next.dart' ;
8
9
import '../../../utils/api/play_pause.dart' ;
9
- import '../../../utils/api/play_play.dart' ;
10
10
import '../../../utils/api/play_previous.dart' ;
11
11
import '../../../utils/dialogs/play_queue_dialog.dart' ;
12
12
import '../../../widgets/playback_controller/fullscreen_button.dart' ;
@@ -74,7 +74,13 @@ var controllerItems = [
74
74
75
75
return MenuFlyoutItem (
76
76
leading: const Icon (Symbols .skip_previous),
77
- text: const Text ('Previous' ),
77
+ text: const Row (
78
+ mainAxisAlignment: MainAxisAlignment .spaceBetween,
79
+ children: [
80
+ Text ('Previous' ),
81
+ ShortcutText ('Ctrl+←' ),
82
+ ],
83
+ ),
78
84
onPressed: notReady
79
85
? null
80
86
: () {
@@ -123,9 +129,10 @@ var controllerItems = [
123
129
leading: status? .state == "Playing"
124
130
? const Icon (Symbols .pause)
125
131
: const Icon (Symbols .play_arrow),
126
- text: status? .state == "Playing"
127
- ? const Text ('Pause' )
128
- : const Text ('Play' ),
132
+ text: Row (mainAxisAlignment: MainAxisAlignment .spaceBetween, children: [
133
+ status? .state == "Playing" ? const Text ('Pause' ) : const Text ('Play' ),
134
+ const ShortcutText ('Ctrl+P' ),
135
+ ]),
129
136
onPressed: notReady
130
137
? null
131
138
: () {
@@ -163,7 +170,13 @@ var controllerItems = [
163
170
164
171
return MenuFlyoutItem (
165
172
leading: const Icon (Symbols .skip_next),
166
- text: const Text ('Next' ),
173
+ text: const Row (
174
+ mainAxisAlignment: MainAxisAlignment .spaceBetween,
175
+ children: [
176
+ Text ('Next' ),
177
+ ShortcutText ('Ctrl+→' ),
178
+ ],
179
+ ),
167
180
onPressed: notReady
168
181
? null
169
182
: () {
@@ -284,7 +297,13 @@ var controllerItems = [
284
297
flyoutEntryBuilder: (context) {
285
298
return MenuFlyoutItem (
286
299
leading: const Icon (Symbols .list_alt),
287
- text: const Text ('Playlist' ),
300
+ text: const Row (
301
+ mainAxisAlignment: MainAxisAlignment .spaceBetween,
302
+ children: [
303
+ Text ('Playlist' ),
304
+ ShortcutText ('Ctrl+Q' ),
305
+ ],
306
+ ),
288
307
onPressed: () {
289
308
Flyout .of (context).close ();
290
309
showPlayQueueDialog (context);
@@ -313,13 +332,21 @@ var controllerItems = [
313
332
icon: Symbols .photo,
314
333
title: "Cover Wall" ,
315
334
subtitle: "Display cover art for a unique ambience" ,
316
- shortcuts: [],
317
- onShortcut: (context) {},
335
+ shortcuts: [LogicalKeySet (LogicalKeyboardKey .alt, LogicalKeyboardKey .keyN)],
336
+ onShortcut: (context) {
337
+ showCoverArtWall (context);
338
+ },
318
339
controllerButtonBuilder: (context) => const CoverWallButton (),
319
340
flyoutEntryBuilder: (context) {
320
341
return MenuFlyoutItem (
321
342
leading: const Icon (Symbols .photo),
322
- text: const Text ('Cover Wall' ),
343
+ text: const Row (
344
+ mainAxisAlignment: MainAxisAlignment .spaceBetween,
345
+ children: [
346
+ Text ('Cover Wall' ),
347
+ ShortcutText ('Alt+N' ),
348
+ ],
349
+ ),
323
350
onPressed: () {
324
351
Flyout .of (context).close ();
325
352
showCoverArtWall (context);
@@ -348,7 +375,13 @@ var controllerItems = [
348
375
leading: fullScreen.isFullScreen
349
376
? const Icon (Symbols .fullscreen_exit)
350
377
: const Icon (Symbols .fullscreen),
351
- text: const Text ('Fullscreen' ),
378
+ text: const Row (
379
+ mainAxisAlignment: MainAxisAlignment .spaceBetween,
380
+ children: [
381
+ Text ('Fullscreen' ),
382
+ ShortcutText ('F11' ),
383
+ ],
384
+ ),
352
385
onPressed: () {
353
386
Flyout .of (context).close ();
354
387
fullScreen.setFullScreen (! fullScreen.isFullScreen);
@@ -357,3 +390,20 @@ var controllerItems = [
357
390
},
358
391
),
359
392
];
393
+
394
+ class ShortcutText extends StatelessWidget {
395
+ const ShortcutText (this .text, {super .key});
396
+
397
+ final String text;
398
+
399
+ @override
400
+ Widget build (BuildContext context) {
401
+ final theme = FluentTheme .of (context);
402
+ return Text (
403
+ text,
404
+ style: theme.typography.caption? .apply (
405
+ color: theme.activeColor.withAlpha (80 ),
406
+ ),
407
+ );
408
+ }
409
+ }
0 commit comments