mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-12 23:45:18 +00:00
feat: replace all types of buttons with platform buttons
This commit is contained in:
parent
9eee573ce9
commit
69739b4572
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/Artist/ArtistAlbumList.dart';
|
import 'package:spotube/components/Artist/ArtistAlbumList.dart';
|
||||||
import 'package:spotube/components/Artist/ArtistCard.dart';
|
import 'package:spotube/components/Artist/ArtistCard.dart';
|
||||||
@ -176,7 +177,7 @@ class ArtistProfile extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.share_rounded),
|
icon: const Icon(Icons.share_rounded),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Clipboard.setData(
|
Clipboard.setData(
|
||||||
@ -260,11 +261,13 @@ class ArtistProfile extends HookConsumerWidget {
|
|||||||
color: Theme.of(context).primaryColor,
|
color: Theme.of(context).primaryColor,
|
||||||
borderRadius: BorderRadius.circular(50),
|
borderRadius: BorderRadius.circular(50),
|
||||||
),
|
),
|
||||||
child: IconButton(
|
child: PlatformIconButton(
|
||||||
icon: Icon(isPlaylistPlaying
|
icon: Icon(
|
||||||
|
isPlaylistPlaying
|
||||||
? Icons.stop_rounded
|
? Icons.stop_rounded
|
||||||
: Icons.play_arrow_rounded),
|
: Icons.play_arrow_rounded,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
|
),
|
||||||
onPressed: () =>
|
onPressed: () =>
|
||||||
playPlaylist(topTracks.toList()),
|
playPlaylist(topTracks.toList()),
|
||||||
),
|
),
|
||||||
|
@ -75,7 +75,7 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
|
|
||||||
if (layoutMode == LayoutMode.compact ||
|
if (layoutMode == LayoutMode.compact ||
|
||||||
(breakpoints.isSm && layoutMode == LayoutMode.adaptive)) {
|
(breakpoints.isSm && layoutMode == LayoutMode.adaptive)) {
|
||||||
return Container();
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
void toggleExtended() =>
|
void toggleExtended() =>
|
||||||
@ -117,7 +117,7 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
child: MoveWindow(
|
child: MoveWindow(
|
||||||
child: !extended.value
|
child: !extended.value
|
||||||
? Center(
|
? Center(
|
||||||
child: IconButton(
|
child: PlatformIconButton(
|
||||||
icon: const Icon(Icons.menu_rounded),
|
icon: const Icon(Icons.menu_rounded),
|
||||||
onPressed: toggleExtended,
|
onPressed: toggleExtended,
|
||||||
),
|
),
|
||||||
@ -127,7 +127,7 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
if (!kIsDesktop && !extended.value)
|
if (!kIsDesktop && !extended.value)
|
||||||
Center(
|
Center(
|
||||||
child: IconButton(
|
child: PlatformIconButton(
|
||||||
icon: const Icon(Icons.menu_rounded),
|
icon: const Icon(Icons.menu_rounded),
|
||||||
onPressed: toggleExtended,
|
onPressed: toggleExtended,
|
||||||
),
|
),
|
||||||
@ -143,7 +143,7 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
"Spotube",
|
"Spotube",
|
||||||
style: Theme.of(context).textTheme.headline4,
|
style: Theme.of(context).textTheme.headline4,
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.menu_rounded),
|
icon: const Icon(Icons.menu_rounded),
|
||||||
onPressed: toggleExtended,
|
onPressed: toggleExtended,
|
||||||
),
|
),
|
||||||
@ -241,7 +241,7 @@ class SidebarFooter extends HookConsumerWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.settings_outlined),
|
icon: const Icon(Icons.settings_outlined),
|
||||||
onPressed: () => Sidebar.goToSettings(context)),
|
onPressed: () => Sidebar.goToSettings(context)),
|
||||||
],
|
],
|
||||||
|
@ -30,7 +30,7 @@ class UserDownloads extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
backgroundColor: Colors.red[50],
|
backgroundColor: Colors.red[50],
|
||||||
foregroundColor: Colors.red[400],
|
foregroundColor: Colors.red[400],
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:introduction_screen/introduction_screen.dart';
|
import 'package:introduction_screen/introduction_screen.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/components/Login/TokenLoginForms.dart';
|
import 'package:spotube/components/Login/TokenLoginForms.dart';
|
||||||
import 'package:spotube/components/Shared/Hyperlink.dart';
|
import 'package:spotube/components/Shared/Hyperlink.dart';
|
||||||
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
@ -16,7 +17,7 @@ class LoginTutorial extends ConsumerWidget {
|
|||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: PageWindowTitleBar(
|
appBar: PageWindowTitleBar(
|
||||||
leading: TextButton(
|
leading: PlatformTextButton(
|
||||||
child: const Text("Exit"),
|
child: const Text("Exit"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
@ -27,7 +28,7 @@ class LoginTutorial extends ConsumerWidget {
|
|||||||
next: const Text("Next"),
|
next: const Text("Next"),
|
||||||
back: const Text("Previous"),
|
back: const Text("Previous"),
|
||||||
showBackButton: true,
|
showBackButton: true,
|
||||||
overrideDone: TextButton(
|
overrideDone: PlatformTextButton(
|
||||||
onPressed: auth.isLoggedIn
|
onPressed: auth.isLoggedIn
|
||||||
? () {
|
? () {
|
||||||
ServiceUtils.navigate(context, "/");
|
ServiceUtils.navigate(context, "/");
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/components/Login/TokenLoginForms.dart';
|
import 'package:spotube/components/Login/TokenLoginForms.dart';
|
||||||
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
import 'package:spotube/hooks/useBreakpoints.dart';
|
import 'package:spotube/hooks/useBreakpoints.dart';
|
||||||
@ -45,7 +46,7 @@ class TokenLogin extends HookConsumerWidget {
|
|||||||
crossAxisAlignment: WrapCrossAlignment.center,
|
crossAxisAlignment: WrapCrossAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
const Text("Don't know how to do this?"),
|
const Text("Don't know how to do this?"),
|
||||||
TextButton(
|
PlatformTextButton(
|
||||||
child: const Text(
|
child: const Text(
|
||||||
"Follow along the Step by Step guide",
|
"Follow along the Step by Step guide",
|
||||||
),
|
),
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/provider/Auth.dart';
|
import 'package:spotube/provider/Auth.dart';
|
||||||
import 'package:spotube/utils/service_utils.dart';
|
import 'package:spotube/utils/service_utils.dart';
|
||||||
|
|
||||||
@ -42,7 +43,7 @@ class TokenLoginForm extends HookConsumerWidget {
|
|||||||
keyboardType: TextInputType.visiblePassword,
|
keyboardType: TextInputType.visiblePassword,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
if (keyCodeController.text.isEmpty ||
|
if (keyCodeController.text.isEmpty ||
|
||||||
directCodeController.text.isEmpty) {
|
directCodeController.text.isEmpty) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/components/Lyrics/SyncedLyrics.dart';
|
import 'package:spotube/components/Lyrics/SyncedLyrics.dart';
|
||||||
|
|
||||||
class LyricDelayAdjustDialog extends HookConsumerWidget {
|
class LyricDelayAdjustDialog extends HookConsumerWidget {
|
||||||
@ -18,13 +19,13 @@ class LyricDelayAdjustDialog extends HookConsumerWidget {
|
|||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Center(child: Text("Adjust Lyrics Delay")),
|
title: const Center(child: Text("Adjust Lyrics Delay")),
|
||||||
actions: [
|
actions: [
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
child: const Text("Cancel"),
|
child: const Text("Cancel"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
child: const Text("Done"),
|
child: const Text("Done"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop(
|
Navigator.of(context).pop(
|
||||||
@ -38,7 +39,7 @@ class LyricDelayAdjustDialog extends HookConsumerWidget {
|
|||||||
content: Row(
|
content: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.remove_rounded),
|
icon: const Icon(Icons.remove_rounded),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
controller.text = "${getValue() - 25}ms";
|
controller.text = "${getValue() - 25}ms";
|
||||||
@ -61,7 +62,7 @@ class LyricDelayAdjustDialog extends HookConsumerWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.add_rounded),
|
icon: const Icon(Icons.add_rounded),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
controller.text = "${getValue() + 25}ms";
|
controller.text = "${getValue() + 25}ms";
|
||||||
|
@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:palette_generator/palette_generator.dart';
|
import 'package:palette_generator/palette_generator.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/LoaderShimmers/ShimmerLyrics.dart';
|
import 'package:spotube/components/LoaderShimmers/ShimmerLyrics.dart';
|
||||||
import 'package:spotube/components/Lyrics/LyricDelayAdjustDialog.dart';
|
import 'package:spotube/components/Lyrics/LyricDelayAdjustDialog.dart';
|
||||||
@ -85,7 +86,7 @@ class SyncedLyrics extends HookConsumerWidget {
|
|||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: Alignment.centerRight,
|
alignment: Alignment.centerRight,
|
||||||
child: IconButton(
|
child: PlatformIconButton(
|
||||||
tooltip: "Lyrics Delay",
|
tooltip: "Lyrics Delay",
|
||||||
icon: const Icon(Icons.av_timer_rounded),
|
icon: const Icon(Icons.av_timer_rounded),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
|
@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/Library/UserLocalTracks.dart';
|
import 'package:spotube/components/Library/UserLocalTracks.dart';
|
||||||
import 'package:spotube/components/Player/PlayerQueue.dart';
|
import 'package:spotube/components/Player/PlayerQueue.dart';
|
||||||
@ -48,7 +49,7 @@ class PlayerActions extends HookConsumerWidget {
|
|||||||
return Row(
|
return Row(
|
||||||
mainAxisAlignment: mainAxisAlignment,
|
mainAxisAlignment: mainAxisAlignment,
|
||||||
children: [
|
children: [
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.queue_music_rounded),
|
icon: const Icon(Icons.queue_music_rounded),
|
||||||
tooltip: 'Queue',
|
tooltip: 'Queue',
|
||||||
onPressed: playback.playlist != null
|
onPressed: playback.playlist != null
|
||||||
@ -73,7 +74,7 @@ class PlayerActions extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.alt_route_rounded),
|
icon: const Icon(Icons.alt_route_rounded),
|
||||||
tooltip: "Alternative Track Sources",
|
tooltip: "Alternative Track Sources",
|
||||||
onPressed: playback.track != null
|
onPressed: playback.track != null
|
||||||
@ -108,7 +109,7 @@ class PlayerActions extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
tooltip: 'Download track',
|
tooltip: 'Download track',
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
isDownloaded
|
isDownloaded
|
||||||
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/hooks/playback.dart';
|
import 'package:spotube/hooks/playback.dart';
|
||||||
import 'package:spotube/models/Intents.dart';
|
import 'package:spotube/models/Intents.dart';
|
||||||
import 'package:spotube/models/Logger.dart';
|
import 'package:spotube/models/Logger.dart';
|
||||||
@ -138,7 +139,7 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
children: [
|
children: [
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
tooltip: playback.isLoop
|
tooltip: playback.isLoop
|
||||||
? "Repeat playlist"
|
? "Repeat playlist"
|
||||||
: playback.isShuffled
|
: playback.isShuffled
|
||||||
@ -156,14 +157,16 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
? null
|
? null
|
||||||
: playback.cyclePlaybackMode,
|
: playback.cyclePlaybackMode,
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Previous track",
|
tooltip: "Previous track",
|
||||||
icon: const Icon(Icons.skip_previous_rounded),
|
icon: Icon(
|
||||||
|
Icons.skip_previous_rounded,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
onPrevious();
|
onPrevious();
|
||||||
}),
|
}),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
tooltip: playback.isPlaying
|
tooltip: playback.isPlaying
|
||||||
? "Pause playback"
|
? "Pause playback"
|
||||||
: "Resume playback",
|
: "Resume playback",
|
||||||
@ -177,23 +180,27 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
playback.isPlaying
|
playback.isPlaying
|
||||||
? Icons.pause_rounded
|
? Icons.pause_rounded
|
||||||
: Icons.play_arrow_rounded,
|
: Icons.play_arrow_rounded,
|
||||||
),
|
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
|
),
|
||||||
onPressed: Actions.handler<PlayPauseIntent>(
|
onPressed: Actions.handler<PlayPauseIntent>(
|
||||||
context,
|
context,
|
||||||
PlayPauseIntent(ref),
|
PlayPauseIntent(ref),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Next track",
|
tooltip: "Next track",
|
||||||
icon: const Icon(Icons.skip_next_rounded),
|
icon: Icon(
|
||||||
onPressed: () => onNext(),
|
Icons.skip_next_rounded,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
),
|
),
|
||||||
IconButton(
|
onPressed: () => onNext(),
|
||||||
|
),
|
||||||
|
PlatformIconButton(
|
||||||
tooltip: "Stop playback",
|
tooltip: "Stop playback",
|
||||||
icon: const Icon(Icons.stop_rounded),
|
icon: Icon(
|
||||||
|
Icons.stop_rounded,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
|
),
|
||||||
onPressed: playback.track != null
|
onPressed: playback.track != null
|
||||||
? () async {
|
? () async {
|
||||||
try {
|
try {
|
||||||
|
@ -3,6 +3,7 @@ import 'dart:ui';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/components/Player/PlayerTrackDetails.dart';
|
import 'package:spotube/components/Player/PlayerTrackDetails.dart';
|
||||||
import 'package:spotube/hooks/playback.dart';
|
import 'package:spotube/hooks/playback.dart';
|
||||||
import 'package:spotube/hooks/usePaletteColor.dart';
|
import 'package:spotube/hooks/usePaletteColor.dart';
|
||||||
@ -79,21 +80,23 @@ class PlayerOverlay extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.skip_previous_rounded),
|
icon: Icon(
|
||||||
|
Icons.skip_previous_rounded,
|
||||||
color: paletteColor.bodyTextColor,
|
color: paletteColor.bodyTextColor,
|
||||||
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
onPrevious();
|
onPrevious();
|
||||||
}),
|
}),
|
||||||
Consumer(
|
Consumer(
|
||||||
builder: (context, ref, _) {
|
builder: (context, ref, _) {
|
||||||
return IconButton(
|
return PlatformIconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
ref.read(playbackProvider).isPlaying
|
ref.read(playbackProvider).isPlaying
|
||||||
? Icons.pause_rounded
|
? Icons.pause_rounded
|
||||||
: Icons.play_arrow_rounded,
|
: Icons.play_arrow_rounded,
|
||||||
),
|
|
||||||
color: paletteColor.bodyTextColor,
|
color: paletteColor.bodyTextColor,
|
||||||
|
),
|
||||||
onPressed: Actions.handler<PlayPauseIntent>(
|
onPressed: Actions.handler<PlayPauseIntent>(
|
||||||
context,
|
context,
|
||||||
PlayPauseIntent(ref),
|
PlayPauseIntent(ref),
|
||||||
@ -101,11 +104,13 @@ class PlayerOverlay extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.skip_next_rounded),
|
icon: Icon(
|
||||||
onPressed: () => onNext(),
|
Icons.skip_next_rounded,
|
||||||
color: paletteColor.bodyTextColor,
|
color: paletteColor.bodyTextColor,
|
||||||
),
|
),
|
||||||
|
onPressed: () => onNext(),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -5,6 +5,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
|||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:palette_generator/palette_generator.dart';
|
import 'package:palette_generator/palette_generator.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/components/Player/PlayerActions.dart';
|
import 'package:spotube/components/Player/PlayerActions.dart';
|
||||||
import 'package:spotube/components/Player/PlayerControls.dart';
|
import 'package:spotube/components/Player/PlayerControls.dart';
|
||||||
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
@ -162,7 +163,7 @@ class PlayerView extends HookConsumerWidget {
|
|||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
floatingQueue: false,
|
floatingQueue: false,
|
||||||
extraActions: [
|
extraActions: [
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Open Lyrics",
|
tooltip: "Open Lyrics",
|
||||||
icon: const Icon(Icons.lyrics_rounded),
|
icon: const Icon(Icons.lyrics_rounded),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@ -185,7 +185,7 @@ class Search extends HookConsumerWidget {
|
|||||||
}),
|
}),
|
||||||
if (searchTrack.hasNextPage && tracks.isNotEmpty)
|
if (searchTrack.hasNextPage && tracks.isNotEmpty)
|
||||||
Center(
|
Center(
|
||||||
child: TextButton(
|
child: PlatformTextButton(
|
||||||
onPressed: searchTrack.isFetchingNextPage
|
onPressed: searchTrack.isFetchingNextPage
|
||||||
? null
|
? null
|
||||||
: () => searchTrack.fetchNextPage(),
|
: () => searchTrack.fetchNextPage(),
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/provider/UserPreferences.dart';
|
import 'package:spotube/provider/UserPreferences.dart';
|
||||||
|
|
||||||
final highContrast = MaterialColor(
|
final highContrast = MaterialColor(
|
||||||
@ -68,13 +69,13 @@ class ColorSchemePickerDialog extends HookConsumerWidget {
|
|||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: Text("Pick ${schemeType.name} color scheme"),
|
title: Text("Pick ${schemeType.name} color scheme"),
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
PlatformTextButton(
|
||||||
child: const Text("Cancel"),
|
child: const Text("Cancel"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
child: const Text("Save"),
|
child: const Text("Save"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
switch (schemeType) {
|
switch (schemeType) {
|
||||||
|
@ -466,9 +466,7 @@ class Settings extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
trailing: (context, update) => ElevatedButton.icon(
|
trailing: (context, update) => PlatformFilledButton(
|
||||||
icon: const Icon(Icons.favorite_outline_rounded),
|
|
||||||
label: const Text("Please Sponsor/Donate"),
|
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
backgroundColor: Colors.red[100],
|
backgroundColor: Colors.red[100],
|
||||||
foregroundColor: Colors.pinkAccent,
|
foregroundColor: Colors.pinkAccent,
|
||||||
@ -480,6 +478,12 @@ class Settings extends HookConsumerWidget {
|
|||||||
mode: LaunchMode.externalApplication,
|
mode: LaunchMode.externalApplication,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
child: Row(
|
||||||
|
children: const [
|
||||||
|
Icon(Icons.favorite_outline_rounded),
|
||||||
|
Text("Please Sponsor/Donate"),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:popover/popover.dart';
|
import 'package:popover/popover.dart';
|
||||||
import 'package:spotube/hooks/useBreakpoints.dart';
|
import 'package:spotube/hooks/useBreakpoints.dart';
|
||||||
|
|
||||||
@ -24,23 +25,25 @@ class Action extends StatelessWidget {
|
|||||||
"\"",
|
"\"",
|
||||||
"",
|
"",
|
||||||
),
|
),
|
||||||
child: IconButton(
|
child: PlatformIconButton(
|
||||||
icon: icon,
|
icon: icon,
|
||||||
onPressed: onPressed,
|
onPressed: onPressed,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return TextButton.icon(
|
return PlatformTextButton(
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
foregroundColor: Theme.of(context).textTheme.bodyMedium?.color,
|
foregroundColor: Theme.of(context).textTheme.bodyMedium?.color,
|
||||||
padding: const EdgeInsets.all(20),
|
padding: const EdgeInsets.all(20),
|
||||||
),
|
),
|
||||||
icon: icon,
|
|
||||||
label: Align(
|
|
||||||
alignment: Alignment.centerLeft,
|
|
||||||
child: text,
|
|
||||||
),
|
|
||||||
onPressed: onPressed,
|
onPressed: onPressed,
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
icon,
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
text,
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -59,7 +62,7 @@ class AdaptiveActions extends HookWidget {
|
|||||||
final breakpoint = useBreakpoints();
|
final breakpoint = useBreakpoints();
|
||||||
|
|
||||||
if (breakpoint.isLessThan(breakOn)) {
|
if (breakpoint.isLessThan(breakOn)) {
|
||||||
return IconButton(
|
return PlatformIconButton(
|
||||||
icon: const Icon(Icons.more_horiz),
|
icon: const Icon(Icons.more_horiz),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
showPopover(
|
showPopover(
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/provider/Auth.dart';
|
import 'package:spotube/provider/Auth.dart';
|
||||||
import 'package:spotube/utils/service_utils.dart';
|
import 'package:spotube/utils/service_utils.dart';
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ class AnonymousFallback extends ConsumerWidget {
|
|||||||
children: [
|
children: [
|
||||||
const Text("You're not logged in"),
|
const Text("You're not logged in"),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
child: const Text("Login with Spotify"),
|
child: const Text("Login with Spotify"),
|
||||||
onPressed: () => ServiceUtils.navigate(context, "/settings"),
|
onPressed: () => ServiceUtils.navigate(context, "/settings"),
|
||||||
)
|
)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/components/Shared/UniversalImage.dart';
|
import 'package:spotube/components/Shared/UniversalImage.dart';
|
||||||
|
|
||||||
class DownloadConfirmationDialog extends StatelessWidget {
|
class DownloadConfirmationDialog extends StatelessWidget {
|
||||||
@ -57,11 +58,11 @@ class DownloadConfirmationDialog extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
child: const Text("Decline"),
|
child: const Text("Decline"),
|
||||||
onPressed: () => Navigator.of(context).pop(false),
|
onPressed: () => Navigator.of(context).pop(false),
|
||||||
),
|
),
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
onPressed: () => Navigator.of(context).pop(true),
|
onPressed: () => Navigator.of(context).pop(true),
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
foregroundColor: Colors.white,
|
foregroundColor: Colors.white,
|
||||||
|
@ -3,6 +3,7 @@ import 'package:fl_query_hooks/fl_query_hooks.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/hooks/usePaletteColor.dart';
|
import 'package:spotube/hooks/usePaletteColor.dart';
|
||||||
import 'package:spotube/provider/Auth.dart';
|
import 'package:spotube/provider/Auth.dart';
|
||||||
@ -32,7 +33,7 @@ class HeartButton extends ConsumerWidget {
|
|||||||
|
|
||||||
if (!auth.isLoggedIn) return Container();
|
if (!auth.isLoggedIn) return Container();
|
||||||
|
|
||||||
return IconButton(
|
return PlatformIconButton(
|
||||||
tooltip: tooltip,
|
tooltip: tooltip,
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
icon ??
|
icon ??
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/utils/platform.dart';
|
import 'package:spotube/utils/platform.dart';
|
||||||
|
|
||||||
class TitleBarActionButtons extends StatelessWidget {
|
class TitleBarActionButtons extends StatelessWidget {
|
||||||
@ -26,7 +27,7 @@ class TitleBarActionButtons extends StatelessWidget {
|
|||||||
data: const IconThemeData(size: 16),
|
data: const IconThemeData(size: 16),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
TextButton(
|
PlatformTextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
appWindow.minimize();
|
appWindow.minimize();
|
||||||
},
|
},
|
||||||
@ -38,7 +39,7 @@ class TitleBarActionButtons extends StatelessWidget {
|
|||||||
Icons.minimize_rounded,
|
Icons.minimize_rounded,
|
||||||
color: color,
|
color: color,
|
||||||
)),
|
)),
|
||||||
TextButton(
|
PlatformTextButton(
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
appWindow.maximizeOrRestore();
|
appWindow.maximizeOrRestore();
|
||||||
},
|
},
|
||||||
@ -50,7 +51,7 @@ class TitleBarActionButtons extends StatelessWidget {
|
|||||||
Icons.crop_square_rounded,
|
Icons.crop_square_rounded,
|
||||||
color: color,
|
color: color,
|
||||||
)),
|
)),
|
||||||
TextButton(
|
PlatformTextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
appWindow.close();
|
appWindow.close();
|
||||||
},
|
},
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
|
||||||
final replaceDownloadedFileState = StateProvider<bool?>((ref) => null);
|
final replaceDownloadedFileState = StateProvider<bool?>((ref) => null);
|
||||||
@ -48,13 +49,13 @@ class ReplaceDownloadedFileDialog extends ConsumerWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
PlatformTextButton(
|
||||||
child: const Text("No"),
|
child: const Text("No"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.pop(context, false);
|
Navigator.pop(context, false);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
TextButton(
|
PlatformTextButton(
|
||||||
child: const Text("Yes"),
|
child: const Text("Yes"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.pop(context, true);
|
Navigator.pop(context, true);
|
||||||
|
@ -2,6 +2,7 @@ import 'package:fl_query/fl_query.dart';
|
|||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/components/LoaderShimmers/ShimmerTrackTile.dart';
|
import 'package:spotube/components/LoaderShimmers/ShimmerTrackTile.dart';
|
||||||
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
import 'package:spotube/components/Shared/TracksTableView.dart';
|
import 'package:spotube/components/Shared/TracksTableView.dart';
|
||||||
@ -59,7 +60,7 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
|||||||
|
|
||||||
final List<Widget> buttons = [
|
final List<Widget> buttons = [
|
||||||
if (showShare)
|
if (showShare)
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.share_rounded,
|
Icons.share_rounded,
|
||||||
color: color?.titleTextColor,
|
color: color?.titleTextColor,
|
||||||
@ -71,13 +72,9 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
|||||||
// play playlist
|
// play playlist
|
||||||
Container(
|
Container(
|
||||||
margin: const EdgeInsets.symmetric(vertical: 10),
|
margin: const EdgeInsets.symmetric(vertical: 10),
|
||||||
child: ElevatedButton(
|
child: PlatformFilledButton(
|
||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
backgroundColor:
|
shape: MaterialStateProperty.all(const CircleBorder()),
|
||||||
MaterialStateProperty.all(Theme.of(context).primaryColor),
|
|
||||||
shape: MaterialStateProperty.all(
|
|
||||||
const CircleBorder(),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
onPressed: tracksSnapshot.data != null ? onPlay : null,
|
onPressed: tracksSnapshot.data != null ? onPlay : null,
|
||||||
child: Icon(
|
child: Icon(
|
||||||
@ -112,7 +109,7 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
|||||||
}, [collapsed.value]);
|
}, [collapsed.value]);
|
||||||
|
|
||||||
return SafeArea(
|
return SafeArea(
|
||||||
child: Scaffold(
|
child: PlatformScaffold(
|
||||||
appBar: kIsDesktop
|
appBar: kIsDesktop
|
||||||
? PageWindowTitleBar(
|
? PageWindowTitleBar(
|
||||||
backgroundColor: color?.color,
|
backgroundColor: color?.color,
|
||||||
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart' hide Action;
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart' hide Image;
|
import 'package:spotify/spotify.dart' hide Image;
|
||||||
import 'package:spotube/components/Shared/AdaptivePopupMenuButton.dart';
|
import 'package:spotube/components/Shared/AdaptivePopupMenuButton.dart';
|
||||||
import 'package:spotube/components/Shared/HeartButton.dart';
|
import 'package:spotube/components/Shared/HeartButton.dart';
|
||||||
@ -105,11 +106,11 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
PlatformTextButton(
|
||||||
child: const Text("Cancel"),
|
child: const Text("Cancel"),
|
||||||
onPressed: () => Navigator.pop(context),
|
onPressed: () => Navigator.pop(context),
|
||||||
),
|
),
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
child: const Text("Add"),
|
child: const Text("Add"),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
final selectedPlaylists = playlistsCheck
|
final selectedPlaylists = playlistsCheck
|
||||||
@ -214,7 +215,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
IconButton(
|
PlatformIconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
playback.track?.id != null &&
|
playback.track?.id != null &&
|
||||||
playback.track?.id == track.value.id
|
playback.track?.id == track.value.id
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/Library/UserLocalTracks.dart';
|
import 'package:spotube/components/Library/UserLocalTracks.dart';
|
||||||
import 'package:spotube/components/Shared/DownloadConfirmationDialog.dart';
|
import 'package:spotube/components/Shared/DownloadConfirmationDialog.dart';
|
||||||
@ -126,10 +127,9 @@ class TracksTableView extends HookConsumerWidget {
|
|||||||
.state = value;
|
.state = value;
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
PopupMenuButton(
|
PlatformPopupMenuButton(
|
||||||
itemBuilder: (context) {
|
items: [
|
||||||
return [
|
PlatformPopupMenuItem(
|
||||||
PopupMenuItem(
|
|
||||||
enabled: selected.value.isNotEmpty,
|
enabled: selected.value.isNotEmpty,
|
||||||
value: "download",
|
value: "download",
|
||||||
child: Row(
|
child: Row(
|
||||||
@ -141,8 +141,7 @@ class TracksTableView extends HookConsumerWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
];
|
],
|
||||||
},
|
|
||||||
onSelected: (action) async {
|
onSelected: (action) async {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case "download":
|
case "download":
|
||||||
@ -163,6 +162,7 @@ class TracksTableView extends HookConsumerWidget {
|
|||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
child: const Icon(Icons.more_vert),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/components/Shared/AnchorButton.dart';
|
import 'package:spotube/components/Shared/AnchorButton.dart';
|
||||||
import 'package:spotube/hooks/usePackageInfo.dart';
|
import 'package:spotube/hooks/usePackageInfo.dart';
|
||||||
import 'package:spotube/provider/UserPreferences.dart';
|
import 'package:spotube/provider/UserPreferences.dart';
|
||||||
@ -59,7 +60,7 @@ void useUpdateChecker(WidgetRef ref) {
|
|||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text("Spotube has an update"),
|
title: const Text("Spotube has an update"),
|
||||||
actions: [
|
actions: [
|
||||||
ElevatedButton(
|
PlatformFilledButton(
|
||||||
child: const Text("Download Now"),
|
child: const Text("Download Now"),
|
||||||
onPressed: () => download(url),
|
onPressed: () => download(url),
|
||||||
),
|
),
|
||||||
|
@ -199,7 +199,7 @@ class SpotubeState extends ConsumerState<Spotube> with WidgetsBindingObserver {
|
|||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
platform = TargetPlatform.macOS;
|
platform = TargetPlatform.windows;
|
||||||
|
|
||||||
return PlatformApp.router(
|
return PlatformApp.router(
|
||||||
routeInformationParser: router.routeInformationParser,
|
routeInformationParser: router.routeInformationParser,
|
||||||
|
Loading…
Reference in New Issue
Block a user