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