From 69739b457296a6b209aa6f73beb378ae1f089ac5 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sat, 29 Oct 2022 15:26:55 +0600 Subject: [PATCH] feat: replace all types of buttons with platform buttons --- lib/components/Artist/ArtistProfile.dart | 15 +++++---- lib/components/Home/Sidebar.dart | 10 +++--- lib/components/Library/UserDownloads.dart | 2 +- lib/components/Login/LoginTutorial.dart | 5 +-- lib/components/Login/TokenLogin.dart | 3 +- lib/components/Login/TokenLoginForms.dart | 3 +- .../Lyrics/LyricDelayAdjustDialog.dart | 9 +++--- lib/components/Lyrics/SyncedLyrics.dart | 3 +- lib/components/Player/PlayerActions.dart | 7 ++-- lib/components/Player/PlayerControls.dart | 31 +++++++++++------- lib/components/Player/PlayerOverlay.dart | 21 +++++++----- lib/components/Player/PlayerView.dart | 3 +- lib/components/Search/Search.dart | 2 +- .../Settings/ColorSchemePickerDialog.dart | 5 +-- lib/components/Settings/Settings.dart | 10 ++++-- .../Shared/AdaptivePopupMenuButton.dart | 19 ++++++----- lib/components/Shared/AnonymousFallback.dart | 3 +- .../Shared/DownloadConfirmationDialog.dart | 5 +-- lib/components/Shared/HeartButton.dart | 3 +- lib/components/Shared/PageWindowTitleBar.dart | 7 ++-- .../Shared/ReplaceDownloadedFileDialog.dart | 5 +-- .../Shared/TrackCollectionView.dart | 13 +++----- lib/components/Shared/TrackTile.dart | 7 ++-- lib/components/Shared/TracksTableView.dart | 32 +++++++++---------- lib/hooks/useUpdateChecker.dart | 3 +- lib/main.dart | 2 +- 26 files changed, 131 insertions(+), 97 deletions(-) diff --git a/lib/components/Artist/ArtistProfile.dart b/lib/components/Artist/ArtistProfile.dart index 266137fed..5d1e288f5 100644 --- a/lib/components/Artist/ArtistProfile.dart +++ b/lib/components/Artist/ArtistProfile.dart @@ -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()), ), diff --git a/lib/components/Home/Sidebar.dart b/lib/components/Home/Sidebar.dart index 517c40390..1d42c49e7 100644 --- a/lib/components/Home/Sidebar.dart +++ b/lib/components/Home/Sidebar.dart @@ -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)), ], diff --git a/lib/components/Library/UserDownloads.dart b/lib/components/Library/UserDownloads.dart index 2b522b1db..4ceaf3d5c 100644 --- a/lib/components/Library/UserDownloads.dart +++ b/lib/components/Library/UserDownloads.dart @@ -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], diff --git a/lib/components/Login/LoginTutorial.dart b/lib/components/Login/LoginTutorial.dart index 21a51bbb9..6d15578ec 100644 --- a/lib/components/Login/LoginTutorial.dart +++ b/lib/components/Login/LoginTutorial.dart @@ -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, "/"); diff --git a/lib/components/Login/TokenLogin.dart b/lib/components/Login/TokenLogin.dart index 57b2be9ad..e7a816578 100644 --- a/lib/components/Login/TokenLogin.dart +++ b/lib/components/Login/TokenLogin.dart @@ -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", ), diff --git a/lib/components/Login/TokenLoginForms.dart b/lib/components/Login/TokenLoginForms.dart index f50e25db3..76ee5a5c3 100644 --- a/lib/components/Login/TokenLoginForms.dart +++ b/lib/components/Login/TokenLoginForms.dart @@ -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) { diff --git a/lib/components/Lyrics/LyricDelayAdjustDialog.dart b/lib/components/Lyrics/LyricDelayAdjustDialog.dart index 222efa01b..f0c5c9093 100644 --- a/lib/components/Lyrics/LyricDelayAdjustDialog.dart +++ b/lib/components/Lyrics/LyricDelayAdjustDialog.dart @@ -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"; diff --git a/lib/components/Lyrics/SyncedLyrics.dart b/lib/components/Lyrics/SyncedLyrics.dart index 042102a8a..ed69c350b 100644 --- a/lib/components/Lyrics/SyncedLyrics.dart +++ b/lib/components/Lyrics/SyncedLyrics.dart @@ -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 { diff --git a/lib/components/Player/PlayerActions.dart b/lib/components/Player/PlayerActions.dart index 53f93595d..9b543d552 100644 --- a/lib/components/Player/PlayerActions.dart +++ b/lib/components/Player/PlayerActions.dart @@ -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 diff --git a/lib/components/Player/PlayerControls.dart b/lib/components/Player/PlayerControls.dart index d0a2c413e..381efac2d 100644 --- a/lib/components/Player/PlayerControls.dart +++ b/lib/components/Player/PlayerControls.dart @@ -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( 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 { diff --git a/lib/components/Player/PlayerOverlay.dart b/lib/components/Player/PlayerOverlay.dart index f5104722b..a36eb9b8b 100644 --- a/lib/components/Player/PlayerOverlay.dart +++ b/lib/components/Player/PlayerOverlay.dart @@ -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( 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, ), ], ), diff --git a/lib/components/Player/PlayerView.dart b/lib/components/Player/PlayerView.dart index 2622de4b3..96edfcca0 100644 --- a/lib/components/Player/PlayerView.dart +++ b/lib/components/Player/PlayerView.dart @@ -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: () { diff --git a/lib/components/Search/Search.dart b/lib/components/Search/Search.dart index 10ba07f4e..d31539a47 100644 --- a/lib/components/Search/Search.dart +++ b/lib/components/Search/Search.dart @@ -185,7 +185,7 @@ class Search extends HookConsumerWidget { }), if (searchTrack.hasNextPage && tracks.isNotEmpty) Center( - child: TextButton( + child: PlatformTextButton( onPressed: searchTrack.isFetchingNextPage ? null : () => searchTrack.fetchNextPage(), diff --git a/lib/components/Settings/ColorSchemePickerDialog.dart b/lib/components/Settings/ColorSchemePickerDialog.dart index f96620d2e..7c0fbe8ae 100644 --- a/lib/components/Settings/ColorSchemePickerDialog.dart +++ b/lib/components/Settings/ColorSchemePickerDialog.dart @@ -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) { diff --git a/lib/components/Settings/Settings.dart b/lib/components/Settings/Settings.dart index cf2b6dee6..bcec8e465 100644 --- a/lib/components/Settings/Settings.dart +++ b/lib/components/Settings/Settings.dart @@ -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( diff --git a/lib/components/Shared/AdaptivePopupMenuButton.dart b/lib/components/Shared/AdaptivePopupMenuButton.dart index dfa8b3dcb..fc1d0a987 100644 --- a/lib/components/Shared/AdaptivePopupMenuButton.dart +++ b/lib/components/Shared/AdaptivePopupMenuButton.dart @@ -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( diff --git a/lib/components/Shared/AnonymousFallback.dart b/lib/components/Shared/AnonymousFallback.dart index 3c8e1931b..252d11068 100644 --- a/lib/components/Shared/AnonymousFallback.dart +++ b/lib/components/Shared/AnonymousFallback.dart @@ -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"), ) diff --git a/lib/components/Shared/DownloadConfirmationDialog.dart b/lib/components/Shared/DownloadConfirmationDialog.dart index 48c96a327..73c04a593 100644 --- a/lib/components/Shared/DownloadConfirmationDialog.dart +++ b/lib/components/Shared/DownloadConfirmationDialog.dart @@ -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, diff --git a/lib/components/Shared/HeartButton.dart b/lib/components/Shared/HeartButton.dart index 24954b341..b119cb9c4 100644 --- a/lib/components/Shared/HeartButton.dart +++ b/lib/components/Shared/HeartButton.dart @@ -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 ?? diff --git a/lib/components/Shared/PageWindowTitleBar.dart b/lib/components/Shared/PageWindowTitleBar.dart index cc39f4992..3ef24250d 100644 --- a/lib/components/Shared/PageWindowTitleBar.dart +++ b/lib/components/Shared/PageWindowTitleBar.dart @@ -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(); }, diff --git a/lib/components/Shared/ReplaceDownloadedFileDialog.dart b/lib/components/Shared/ReplaceDownloadedFileDialog.dart index 6b6591b76..ec472b8d2 100644 --- a/lib/components/Shared/ReplaceDownloadedFileDialog.dart +++ b/lib/components/Shared/ReplaceDownloadedFileDialog.dart @@ -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((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); diff --git a/lib/components/Shared/TrackCollectionView.dart b/lib/components/Shared/TrackCollectionView.dart index 85e752669..f89d750a4 100644 --- a/lib/components/Shared/TrackCollectionView.dart +++ b/lib/components/Shared/TrackCollectionView.dart @@ -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 extends HookConsumerWidget { final List buttons = [ if (showShare) - IconButton( + PlatformIconButton( icon: Icon( Icons.share_rounded, color: color?.titleTextColor, @@ -71,13 +72,9 @@ class TrackCollectionView 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 extends HookConsumerWidget { }, [collapsed.value]); return SafeArea( - child: Scaffold( + child: PlatformScaffold( appBar: kIsDesktop ? PageWindowTitleBar( backgroundColor: color?.color, diff --git a/lib/components/Shared/TrackTile.dart b/lib/components/Shared/TrackTile.dart index 88f6bd806..b3c185422 100644 --- a/lib/components/Shared/TrackTile.dart +++ b/lib/components/Shared/TrackTile.dart @@ -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 diff --git a/lib/components/Shared/TracksTableView.dart b/lib/components/Shared/TracksTableView.dart index 60bbd55a8..212104408 100644 --- a/lib/components/Shared/TracksTableView.dart +++ b/lib/components/Shared/TracksTableView.dart @@ -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), ), ], ), diff --git a/lib/hooks/useUpdateChecker.dart b/lib/hooks/useUpdateChecker.dart index 672bcb4b4..f0648a55c 100644 --- a/lib/hooks/useUpdateChecker.dart +++ b/lib/hooks/useUpdateChecker.dart @@ -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), ), diff --git a/lib/main.dart b/lib/main.dart index c26eff738..e4124d48e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -199,7 +199,7 @@ class SpotubeState extends ConsumerState with WidgetsBindingObserver { }; }, []); - platform = TargetPlatform.macOS; + platform = TargetPlatform.windows; return PlatformApp.router( routeInformationParser: router.routeInformationParser,