mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-12 23:45:18 +00:00
feat: centralized icon collection with new icon set and nav bar labels hidden
This commit is contained in:
parent
6902060cdd
commit
e7acb9ed5c
@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
|
|
||||||
class SideBarTiles {
|
class SideBarTiles {
|
||||||
final IconData icon;
|
final IconData icon;
|
||||||
@ -7,8 +8,8 @@ class SideBarTiles {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<SideBarTiles> sidebarTileList = [
|
List<SideBarTiles> sidebarTileList = [
|
||||||
SideBarTiles(icon: Icons.home_rounded, title: "Browse"),
|
SideBarTiles(icon: SpotubeIcons.home, title: "Browse"),
|
||||||
SideBarTiles(icon: Icons.search_rounded, title: "Search"),
|
SideBarTiles(icon: SpotubeIcons.search, title: "Search"),
|
||||||
SideBarTiles(icon: Icons.library_books_rounded, title: "Library"),
|
SideBarTiles(icon: SpotubeIcons.library, title: "Library"),
|
||||||
SideBarTiles(icon: Icons.music_note_rounded, title: "Lyrics")
|
SideBarTiles(icon: SpotubeIcons.music, title: "Lyrics")
|
||||||
];
|
];
|
||||||
|
61
lib/collections/spotube_icons.dart
Normal file
61
lib/collections/spotube_icons.dart
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import 'package:fluent_ui/fluent_ui.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||||
|
|
||||||
|
abstract class SpotubeIcons {
|
||||||
|
static const home = FluentIcons.home;
|
||||||
|
static const search = FeatherIcons.search;
|
||||||
|
static const library = FluentIcons.library;
|
||||||
|
static const music = FeatherIcons.music;
|
||||||
|
static const play = FluentIcons.play;
|
||||||
|
static const pause = FeatherIcons.pause;
|
||||||
|
static const skipForward = FeatherIcons.skipForward;
|
||||||
|
static const skipBack = FeatherIcons.skipBack;
|
||||||
|
static const stop = FeatherIcons.square;
|
||||||
|
static const filter = FeatherIcons.filter;
|
||||||
|
static const refresh = FeatherIcons.refreshCw;
|
||||||
|
static const settings = FeatherIcons.settings;
|
||||||
|
static const shuffle = FeatherIcons.shuffle;
|
||||||
|
static const repeat = FluentIcons.repeat_all;
|
||||||
|
static const repeatOne = FluentIcons.repeat_one;
|
||||||
|
static const remove = FeatherIcons.minus;
|
||||||
|
static const removeFilled = FeatherIcons.minusCircle;
|
||||||
|
static const add = FeatherIcons.plus;
|
||||||
|
static const addFilled = FeatherIcons.plusSquare;
|
||||||
|
static const heart = FeatherIcons.heart;
|
||||||
|
static const heartFilled = Icons.favorite_rounded;
|
||||||
|
static const queue = Icons.queue_music_rounded;
|
||||||
|
static const download = FeatherIcons.download;
|
||||||
|
static const done = FeatherIcons.checkCircle;
|
||||||
|
static const alternativeRoute = Icons.alt_route_rounded;
|
||||||
|
static const sort = Icons.sort_rounded;
|
||||||
|
static const moreVertical = FeatherIcons.moreVertical;
|
||||||
|
static const moreHorizontal = FeatherIcons.moreHorizontal;
|
||||||
|
static const share = FeatherIcons.share2;
|
||||||
|
static const playlistAdd = Icons.playlist_add_rounded;
|
||||||
|
static const playlistRemove = Icons.playlist_remove_rounded;
|
||||||
|
static const trash = FeatherIcons.trash2;
|
||||||
|
static const clock = FeatherIcons.clock;
|
||||||
|
static const lyrics = Icons.lyrics_rounded;
|
||||||
|
static const logout = FeatherIcons.logOut;
|
||||||
|
static const login = FeatherIcons.logIn;
|
||||||
|
static const dashboard = FeatherIcons.grid;
|
||||||
|
static const darkMode = FeatherIcons.moon;
|
||||||
|
static const platform = FeatherIcons.smartphone;
|
||||||
|
static const palette = Icons.palette_outlined;
|
||||||
|
static const colorBucket = Icons.format_color_fill_rounded;
|
||||||
|
static const album = FeatherIcons.disc;
|
||||||
|
static const artist = FeatherIcons.user;
|
||||||
|
static const audioQuality = Icons.multitrack_audio_rounded;
|
||||||
|
static const fastForward = FeatherIcons.fastForward;
|
||||||
|
static const angleRight = FeatherIcons.chevronRight;
|
||||||
|
static const angleLeft = FeatherIcons.chevronLeft;
|
||||||
|
static const shoppingBag = FeatherIcons.shoppingBag;
|
||||||
|
static const screenSearch = Icons.screen_search_desktop_outlined;
|
||||||
|
static const save = FeatherIcons.save;
|
||||||
|
static const barChart = FeatherIcons.barChart2;
|
||||||
|
static const folder = FeatherIcons.folder;
|
||||||
|
static const update = FeatherIcons.refreshCcw;
|
||||||
|
static const info = FeatherIcons.info;
|
||||||
|
static const userRemove = FeatherIcons.userX;
|
||||||
|
}
|
@ -5,6 +5,7 @@ import 'package:collection/collection.dart';
|
|||||||
import 'package:fuzzywuzzy/fuzzywuzzy.dart';
|
import 'package:fuzzywuzzy/fuzzywuzzy.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/album/album_card.dart';
|
import 'package:spotube/components/album/album_card.dart';
|
||||||
import 'package:spotube/components/shared/playbutton_card.dart';
|
import 'package:spotube/components/shared/playbutton_card.dart';
|
||||||
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
|
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
|
||||||
@ -72,7 +73,7 @@ class UserAlbums extends HookConsumerWidget {
|
|||||||
children: [
|
children: [
|
||||||
PlatformTextField(
|
PlatformTextField(
|
||||||
onChanged: (value) => searchText.value = value,
|
onChanged: (value) => searchText.value = value,
|
||||||
prefixIcon: Icons.filter_alt_outlined,
|
prefixIcon: SpotubeIcons.filter,
|
||||||
placeholder: 'Filter Albums...',
|
placeholder: 'Filter Albums...',
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
|
@ -6,6 +6,7 @@ import 'package:fuzzywuzzy/fuzzywuzzy.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
|
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
|
||||||
import 'package:spotube/components/shared/waypoint.dart';
|
import 'package:spotube/components/shared/waypoint.dart';
|
||||||
import 'package:spotube/components/artist/artist_card.dart';
|
import 'package:spotube/components/artist/artist_card.dart';
|
||||||
@ -63,7 +64,7 @@ class UserArtists extends HookConsumerWidget {
|
|||||||
color: PlatformTheme.of(context).scaffoldBackgroundColor!,
|
color: PlatformTheme.of(context).scaffoldBackgroundColor!,
|
||||||
child: PlatformTextField(
|
child: PlatformTextField(
|
||||||
onChanged: (value) => searchText.value = value,
|
onChanged: (value) => searchText.value = value,
|
||||||
prefixIcon: Icons.filter_alt_outlined,
|
prefixIcon: SpotubeIcons.filter,
|
||||||
placeholder: 'Filter artists...',
|
placeholder: 'Filter artists...',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -13,6 +13,7 @@ import 'package:path_provider/path_provider.dart';
|
|||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/compact_search.dart';
|
import 'package:spotube/components/shared/compact_search.dart';
|
||||||
import 'package:spotube/components/shared/shimmers/shimmer_track_tile.dart';
|
import 'package:spotube/components/shared/shimmers/shimmer_track_tile.dart';
|
||||||
import 'package:spotube/components/shared/sort_tracks_dropdown.dart';
|
import 'package:spotube/components/shared/sort_tracks_dropdown.dart';
|
||||||
@ -208,9 +209,7 @@ class UserLocalTracks extends HookConsumerWidget {
|
|||||||
children: [
|
children: [
|
||||||
const Text("Play"),
|
const Text("Play"),
|
||||||
Icon(
|
Icon(
|
||||||
isPlaylistPlaying
|
isPlaylistPlaying ? SpotubeIcons.stop : SpotubeIcons.play,
|
||||||
? Icons.stop_rounded
|
|
||||||
: Icons.play_arrow_rounded,
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@ -226,7 +225,7 @@ class UserLocalTracks extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
PlatformFilledButton(
|
PlatformFilledButton(
|
||||||
child: const Icon(Icons.refresh_rounded),
|
child: const Icon(SpotubeIcons.refresh),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
ref.refresh(localTracksProvider);
|
ref.refresh(localTracksProvider);
|
||||||
},
|
},
|
||||||
|
@ -6,6 +6,7 @@ import 'package:collection/collection.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/playlist/playlist_create_dialog.dart';
|
import 'package:spotube/components/playlist/playlist_create_dialog.dart';
|
||||||
import 'package:spotube/components/shared/playbutton_card.dart';
|
import 'package:spotube/components/shared/playbutton_card.dart';
|
||||||
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
|
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
|
||||||
@ -99,7 +100,7 @@ class UserPlaylists extends HookConsumerWidget {
|
|||||||
PlatformTextField(
|
PlatformTextField(
|
||||||
onChanged: (value) => searchText.value = value,
|
onChanged: (value) => searchText.value = value,
|
||||||
placeholder: "Filter your playlists...",
|
placeholder: "Filter your playlists...",
|
||||||
prefixIcon: Icons.filter_alt_outlined,
|
prefixIcon: SpotubeIcons.filter,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
if (playlistsQuery.isLoading || !playlistsQuery.hasData)
|
if (playlistsQuery.isLoading || !playlistsQuery.hasData)
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.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:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/root/sidebar.dart';
|
import 'package:spotube/components/root/sidebar.dart';
|
||||||
import 'package:spotube/pages/lyrics/synced_lyrics.dart';
|
import 'package:spotube/pages/lyrics/synced_lyrics.dart';
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ class LyricDelayAdjustDialog extends HookConsumerWidget {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.remove_rounded),
|
icon: const Icon(SpotubeIcons.remove),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
controller.text = "${getValue() - 25}ms";
|
controller.text = "${getValue() - 25}ms";
|
||||||
},
|
},
|
||||||
@ -100,7 +100,7 @@ class LyricDelayAdjustDialog extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.add_rounded),
|
icon: const Icon(SpotubeIcons.add),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
controller.text = "${getValue() + 25}ms";
|
controller.text = "${getValue() + 25}ms";
|
||||||
},
|
},
|
||||||
|
@ -4,6 +4,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/library/user_local_tracks.dart';
|
import 'package:spotube/components/library/user_local_tracks.dart';
|
||||||
import 'package:spotube/components/player/player_queue.dart';
|
import 'package:spotube/components/player/player_queue.dart';
|
||||||
import 'package:spotube/components/player/sibling_tracks_sheet.dart';
|
import 'package:spotube/components/player/sibling_tracks_sheet.dart';
|
||||||
@ -53,7 +54,7 @@ class PlayerActions extends HookConsumerWidget {
|
|||||||
mainAxisAlignment: mainAxisAlignment,
|
mainAxisAlignment: mainAxisAlignment,
|
||||||
children: [
|
children: [
|
||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.queue_music_rounded),
|
icon: const Icon(SpotubeIcons.queue),
|
||||||
tooltip: 'Queue',
|
tooltip: 'Queue',
|
||||||
onPressed: playback.playlist != null
|
onPressed: playback.playlist != null
|
||||||
? () {
|
? () {
|
||||||
@ -79,7 +80,7 @@ class PlayerActions extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
if (!isLocalTrack)
|
if (!isLocalTrack)
|
||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.alt_route_rounded),
|
icon: const Icon(SpotubeIcons.alternativeRoute),
|
||||||
tooltip: "Alternative Track Sources",
|
tooltip: "Alternative Track Sources",
|
||||||
onPressed: playback.track != null
|
onPressed: playback.track != null
|
||||||
? () {
|
? () {
|
||||||
@ -116,9 +117,7 @@ class PlayerActions extends HookConsumerWidget {
|
|||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
tooltip: 'Download track',
|
tooltip: 'Download track',
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
isDownloaded
|
isDownloaded ? SpotubeIcons.done : SpotubeIcons.download,
|
||||||
? Icons.download_done_rounded
|
|
||||||
: Icons.download_rounded,
|
|
||||||
),
|
),
|
||||||
onPressed: playback.track != null
|
onPressed: playback.track != null
|
||||||
? () => downloader.addToQueue(playback.track!)
|
? () => downloader.addToQueue(playback.track!)
|
||||||
|
@ -3,6 +3,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/hooks/playback_hooks.dart';
|
import 'package:spotube/hooks/playback_hooks.dart';
|
||||||
import 'package:spotube/collections/intents.dart';
|
import 'package:spotube/collections/intents.dart';
|
||||||
import 'package:spotube/models/logger.dart';
|
import 'package:spotube/models/logger.dart';
|
||||||
@ -143,7 +144,7 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
? "Unshuffle playlist"
|
? "Unshuffle playlist"
|
||||||
: "Shuffle playlist",
|
: "Shuffle playlist",
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.shuffle_rounded,
|
SpotubeIcons.shuffle,
|
||||||
color: playback.isShuffled
|
color: playback.isShuffled
|
||||||
? PlatformTheme.of(context).primaryColor
|
? PlatformTheme.of(context).primaryColor
|
||||||
: null,
|
: null,
|
||||||
@ -157,7 +158,7 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Previous track",
|
tooltip: "Previous track",
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.skip_previous_rounded,
|
SpotubeIcons.skipBack,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@ -175,8 +176,8 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
)
|
)
|
||||||
: Icon(
|
: Icon(
|
||||||
playback.isPlaying
|
playback.isPlaying
|
||||||
? Icons.pause_rounded
|
? SpotubeIcons.pause
|
||||||
: Icons.play_arrow_rounded,
|
: SpotubeIcons.play,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
),
|
),
|
||||||
onPressed: Actions.handler<PlayPauseIntent>(
|
onPressed: Actions.handler<PlayPauseIntent>(
|
||||||
@ -187,7 +188,7 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Next track",
|
tooltip: "Next track",
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.skip_next_rounded,
|
SpotubeIcons.skipForward,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
),
|
),
|
||||||
onPressed: () => onNext(),
|
onPressed: () => onNext(),
|
||||||
@ -195,7 +196,7 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Stop playback",
|
tooltip: "Stop playback",
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.stop_rounded,
|
SpotubeIcons.stop,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
),
|
),
|
||||||
onPressed: playback.track != null
|
onPressed: playback.track != null
|
||||||
@ -213,8 +214,8 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
!playback.isLoop ? "Loop Track" : "Repeat playlist",
|
!playback.isLoop ? "Loop Track" : "Repeat playlist",
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
playback.isLoop
|
playback.isLoop
|
||||||
? Icons.repeat_one_rounded
|
? SpotubeIcons.repeatOne
|
||||||
: Icons.repeat_rounded,
|
: SpotubeIcons.repeat,
|
||||||
),
|
),
|
||||||
onPressed:
|
onPressed:
|
||||||
playback.track == null || playback.playlist == null
|
playback.track == null || playback.playlist == null
|
||||||
|
@ -4,6 +4,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/player/player_track_details.dart';
|
import 'package:spotube/components/player/player_track_details.dart';
|
||||||
import 'package:spotube/hooks/playback_hooks.dart';
|
import 'package:spotube/hooks/playback_hooks.dart';
|
||||||
import 'package:spotube/hooks/use_palette_color.dart';
|
import 'package:spotube/hooks/use_palette_color.dart';
|
||||||
@ -83,7 +84,7 @@ class PlayerOverlay extends HookConsumerWidget {
|
|||||||
children: [
|
children: [
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.skip_previous_rounded,
|
SpotubeIcons.skipBack,
|
||||||
color: paletteColor.bodyTextColor,
|
color: paletteColor.bodyTextColor,
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@ -94,8 +95,8 @@ class PlayerOverlay extends HookConsumerWidget {
|
|||||||
return IconButton(
|
return IconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
ref.read(playbackProvider).isPlaying
|
ref.read(playbackProvider).isPlaying
|
||||||
? Icons.pause_rounded
|
? SpotubeIcons.pause
|
||||||
: Icons.play_arrow_rounded,
|
: SpotubeIcons.play,
|
||||||
color: paletteColor.bodyTextColor,
|
color: paletteColor.bodyTextColor,
|
||||||
),
|
),
|
||||||
onPressed: Actions.handler<PlayPauseIntent>(
|
onPressed: Actions.handler<PlayPauseIntent>(
|
||||||
@ -107,7 +108,7 @@ class PlayerOverlay extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.skip_next_rounded,
|
SpotubeIcons.skipForward,
|
||||||
color: paletteColor.bodyTextColor,
|
color: paletteColor.bodyTextColor,
|
||||||
),
|
),
|
||||||
onPressed: () => onNext(),
|
onPressed: () => onNext(),
|
||||||
|
@ -4,6 +4,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:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/root/sidebar.dart';
|
import 'package:spotube/components/root/sidebar.dart';
|
||||||
import 'package:spotube/provider/spotify_provider.dart';
|
import 'package:spotube/provider/spotify_provider.dart';
|
||||||
import 'package:spotube/services/queries/queries.dart';
|
import 'package:spotube/services/queries/queries.dart';
|
||||||
@ -138,7 +139,7 @@ class PlaylistCreateDialog extends HookConsumerWidget {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: const [
|
children: const [
|
||||||
Icon(Icons.add_box_rounded, size: 40),
|
Icon(SpotubeIcons.addFilled, size: 40),
|
||||||
PlatformText("Create Playlist", style: TextStyle(fontSize: 20)),
|
PlatformText("Create Playlist", style: TextStyle(fontSize: 20)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -6,6 +6,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/collections/side_bar_tiles.dart';
|
import 'package:spotube/collections/side_bar_tiles.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/image/universal_image.dart';
|
import 'package:spotube/components/shared/image/universal_image.dart';
|
||||||
import 'package:spotube/hooks/use_breakpoints.dart';
|
import 'package:spotube/hooks/use_breakpoints.dart';
|
||||||
import 'package:spotube/provider/auth_provider.dart';
|
import 'package:spotube/provider/auth_provider.dart';
|
||||||
@ -175,7 +176,7 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
windowsFooterItems: [
|
windowsFooterItems: [
|
||||||
fluent_ui.PaneItemAction(
|
fluent_ui.PaneItemAction(
|
||||||
icon: const fluent_ui.Icon(fluent_ui.FluentIcons.settings),
|
icon: const Icon(SpotubeIcons.settings),
|
||||||
onTap: () => goToSettings(context),
|
onTap: () => goToSettings(context),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -192,8 +193,6 @@ class SidebarFooter extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final auth = ref.watch(authProvider);
|
|
||||||
|
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
width: 256,
|
width: 256,
|
||||||
child: HookBuilder(
|
child: HookBuilder(
|
||||||
@ -268,7 +267,7 @@ class SidebarFooter extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.settings_outlined),
|
icon: const Icon(SpotubeIcons.settings),
|
||||||
onPressed: () => Sidebar.goToSettings(context)),
|
onPressed: () => Sidebar.goToSettings(context)),
|
||||||
],
|
],
|
||||||
));
|
));
|
||||||
|
@ -3,6 +3,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/collections/side_bar_tiles.dart';
|
import 'package:spotube/collections/side_bar_tiles.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/root/sidebar.dart';
|
import 'package:spotube/components/root/sidebar.dart';
|
||||||
import 'package:spotube/hooks/use_breakpoints.dart';
|
import 'package:spotube/hooks/use_breakpoints.dart';
|
||||||
import 'package:spotube/provider/downloader_provider.dart';
|
import 'package:spotube/provider/downloader_provider.dart';
|
||||||
@ -48,7 +49,7 @@ class SpotubeNavigationBar extends HookConsumerWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
const PlatformBottomNavigationBarItem(
|
const PlatformBottomNavigationBarItem(
|
||||||
icon: Icons.settings_rounded,
|
icon: SpotubeIcons.settings,
|
||||||
label: "Settings",
|
label: "Settings",
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
@ -2,6 +2,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:popover/popover.dart';
|
import 'package:popover/popover.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/hooks/use_breakpoints.dart';
|
import 'package:spotube/hooks/use_breakpoints.dart';
|
||||||
|
|
||||||
class Action extends StatelessWidget {
|
class Action extends StatelessWidget {
|
||||||
@ -90,7 +91,7 @@ class AdaptiveActions extends HookWidget {
|
|||||||
|
|
||||||
if (breakpoint.isLessThan(breakOn)) {
|
if (breakpoint.isLessThan(breakOn)) {
|
||||||
return PlatformIconButton(
|
return PlatformIconButton(
|
||||||
icon: const Icon(Icons.more_horiz),
|
icon: const Icon(SpotubeIcons.moreHorizontal),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
showPopover(
|
showPopover(
|
||||||
context: context,
|
context: context,
|
||||||
|
@ -2,6 +2,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:popover/popover.dart';
|
import 'package:popover/popover.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
|
|
||||||
class CompactSearch extends HookWidget {
|
class CompactSearch extends HookWidget {
|
||||||
final ValueChanged<String>? onChanged;
|
final ValueChanged<String>? onChanged;
|
||||||
@ -13,7 +14,7 @@ class CompactSearch extends HookWidget {
|
|||||||
Key? key,
|
Key? key,
|
||||||
this.onChanged,
|
this.onChanged,
|
||||||
this.placeholder = "Search...",
|
this.placeholder = "Search...",
|
||||||
this.icon = Icons.search,
|
this.icon = SpotubeIcons.search,
|
||||||
this.iconColor,
|
this.iconColor,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/hooks/use_palette_color.dart';
|
import 'package:spotube/hooks/use_palette_color.dart';
|
||||||
import 'package:spotube/provider/auth_provider.dart';
|
import 'package:spotube/provider/auth_provider.dart';
|
||||||
import 'package:spotube/provider/spotify_provider.dart';
|
import 'package:spotube/provider/spotify_provider.dart';
|
||||||
@ -38,10 +39,7 @@ class HeartButton extends ConsumerWidget {
|
|||||||
return PlatformIconButton(
|
return PlatformIconButton(
|
||||||
tooltip: tooltip,
|
tooltip: tooltip,
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
icon ??
|
icon ?? (!isLiked ? SpotubeIcons.heart : SpotubeIcons.heartFilled),
|
||||||
(!isLiked
|
|
||||||
? Icons.favorite_outline_rounded
|
|
||||||
: Icons.favorite_rounded),
|
|
||||||
color: isLiked ? Colors.pink : color,
|
color: isLiked ? Colors.pink : color,
|
||||||
),
|
),
|
||||||
onPressed: onPressed,
|
onPressed: onPressed,
|
||||||
|
@ -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:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/hover_builder.dart';
|
import 'package:spotube/components/shared/hover_builder.dart';
|
||||||
import 'package:spotube/components/shared/spotube_marquee_text.dart';
|
import 'package:spotube/components/shared/spotube_marquee_text.dart';
|
||||||
import 'package:spotube/components/shared/image/universal_image.dart';
|
import 'package:spotube/components/shared/image/universal_image.dart';
|
||||||
@ -95,9 +96,7 @@ class PlaybuttonCard extends HookWidget {
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
: Icon(
|
: Icon(
|
||||||
isPlaying
|
isPlaying ? SpotubeIcons.pause : SpotubeIcons.play,
|
||||||
? Icons.pause_rounded
|
|
||||||
: Icons.play_arrow_rounded,
|
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/library/user_local_tracks.dart';
|
import 'package:spotube/components/library/user_local_tracks.dart';
|
||||||
|
|
||||||
class SortTracksDropdown extends StatelessWidget {
|
class SortTracksDropdown extends StatelessWidget {
|
||||||
@ -48,7 +49,7 @@ class SortTracksDropdown extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
onSelected: onChanged,
|
onSelected: onChanged,
|
||||||
tooltip: "Sort tracks",
|
tooltip: "Sort tracks",
|
||||||
child: const Icon(Icons.sort_rounded),
|
child: const Icon(SpotubeIcons.sort),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import 'package:fuzzywuzzy/fuzzywuzzy.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:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/compact_search.dart';
|
import 'package:spotube/components/shared/compact_search.dart';
|
||||||
import 'package:spotube/components/shared/shimmers/shimmer_track_tile.dart';
|
import 'package:spotube/components/shared/shimmers/shimmer_track_tile.dart';
|
||||||
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
||||||
@ -70,7 +71,7 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
|||||||
if (showShare)
|
if (showShare)
|
||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.share_rounded,
|
SpotubeIcons.share,
|
||||||
color: color?.titleTextColor,
|
color: color?.titleTextColor,
|
||||||
),
|
),
|
||||||
onPressed: onShare,
|
onPressed: onShare,
|
||||||
@ -79,7 +80,7 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
|||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Shuffle",
|
tooltip: "Shuffle",
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.shuffle,
|
SpotubeIcons.shuffle,
|
||||||
color: color?.titleTextColor,
|
color: color?.titleTextColor,
|
||||||
),
|
),
|
||||||
onPressed: onShuffledPlay,
|
onPressed: onShuffledPlay,
|
||||||
@ -90,7 +91,7 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
|||||||
backgroundColor: PlatformTheme.of(context).primaryColor,
|
backgroundColor: PlatformTheme.of(context).primaryColor,
|
||||||
onPressed: tracksSnapshot.data != null ? onPlay : null,
|
onPressed: tracksSnapshot.data != null ? onPlay : null,
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
isPlaying ? Icons.stop_rounded : Icons.play_arrow_rounded,
|
isPlaying ? SpotubeIcons.stop : SpotubeIcons.play,
|
||||||
color: PlatformTextTheme.of(context).body?.color,
|
color: PlatformTextTheme.of(context).body?.color,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -167,7 +168,7 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
|||||||
borderColor: color?.titleTextColor,
|
borderColor: color?.titleTextColor,
|
||||||
prefixIconColor: color?.titleTextColor,
|
prefixIconColor: color?.titleTextColor,
|
||||||
cursorColor: color?.titleTextColor,
|
cursorColor: color?.titleTextColor,
|
||||||
prefixIcon: Icons.search_rounded,
|
prefixIcon: SpotubeIcons.search,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart' hide Image;
|
import 'package:spotify/spotify.dart' hide Image;
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/adaptive/adaptive_popup_menu_button.dart';
|
import 'package:spotube/components/shared/adaptive/adaptive_popup_menu_button.dart';
|
||||||
import 'package:spotube/components/shared/heart_button.dart';
|
import 'package:spotube/components/shared/heart_button.dart';
|
||||||
import 'package:spotube/components/shared/links/link_text.dart';
|
import 'package:spotube/components/shared/links/link_text.dart';
|
||||||
@ -236,13 +237,13 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(8.0).copyWith(left: 0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: PlatformIconButton(
|
child: 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
|
||||||
? Icons.pause_rounded
|
? SpotubeIcons.pause
|
||||||
: Icons.play_arrow_rounded,
|
: SpotubeIcons.play,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
backgroundColor: PlatformTheme.of(context).primaryColor,
|
backgroundColor: PlatformTheme.of(context).primaryColor,
|
||||||
@ -323,10 +324,10 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
Action(
|
Action(
|
||||||
icon: toggler.item1
|
icon: toggler.item1
|
||||||
? const Icon(
|
? const Icon(
|
||||||
Icons.favorite_rounded,
|
SpotubeIcons.heartFilled,
|
||||||
color: Colors.pink,
|
color: Colors.pink,
|
||||||
)
|
)
|
||||||
: const Icon(Icons.favorite_border_rounded),
|
: const Icon(SpotubeIcons.heart),
|
||||||
text: const PlatformText("Save as favorite"),
|
text: const PlatformText("Save as favorite"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
toggler.item2.mutate(Tuple2(spotify, toggler.item1));
|
toggler.item2.mutate(Tuple2(spotify, toggler.item1));
|
||||||
@ -334,7 +335,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
if (auth.isLoggedIn)
|
if (auth.isLoggedIn)
|
||||||
Action(
|
Action(
|
||||||
icon: const Icon(Icons.add_box_rounded),
|
icon: const Icon(SpotubeIcons.addFilled),
|
||||||
text: const PlatformText("Add To playlist"),
|
text: const PlatformText("Add To playlist"),
|
||||||
onPressed: actionAddToPlaylist,
|
onPressed: actionAddToPlaylist,
|
||||||
),
|
),
|
||||||
@ -345,7 +346,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
? const Center(
|
? const Center(
|
||||||
child: PlatformCircularProgressIndicator(),
|
child: PlatformCircularProgressIndicator(),
|
||||||
)
|
)
|
||||||
: const Icon(Icons.remove_circle_outline_rounded),
|
: const Icon(SpotubeIcons.removeFilled),
|
||||||
text: const PlatformText("Remove from playlist"),
|
text: const PlatformText("Remove from playlist"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
removingTrack.value = track.value.uri;
|
removingTrack.value = track.value.uri;
|
||||||
@ -353,7 +354,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
Action(
|
Action(
|
||||||
icon: const Icon(Icons.share_rounded),
|
icon: const Icon(SpotubeIcons.share),
|
||||||
text: const PlatformText("Share"),
|
text: const PlatformText("Share"),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
actionShare(track.value);
|
actionShare(track.value);
|
||||||
@ -361,7 +362,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
Action(
|
Action(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.playlist_remove_rounded,
|
SpotubeIcons.playlistRemove,
|
||||||
color: isBlackListed ? Colors.white : Colors.red[400],
|
color: isBlackListed ? Colors.white : Colors.red[400],
|
||||||
),
|
),
|
||||||
backgroundColor: isBlackListed ? Colors.red[400] : null,
|
backgroundColor: isBlackListed ? Colors.red[400] : null,
|
||||||
|
@ -3,6 +3,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/dialogs/confirm_download_dialog.dart';
|
import 'package:spotube/components/shared/dialogs/confirm_download_dialog.dart';
|
||||||
import 'package:spotube/components/shared/dialogs/playlist_add_track_dialog.dart';
|
import 'package:spotube/components/shared/dialogs/playlist_add_track_dialog.dart';
|
||||||
import 'package:spotube/components/shared/fallbacks/not_found.dart';
|
import 'package:spotube/components/shared/fallbacks/not_found.dart';
|
||||||
@ -139,7 +140,8 @@ class TracksTableView extends HookConsumerWidget {
|
|||||||
value: "download",
|
value: "download",
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const Icon(Icons.file_download_outlined),
|
const Icon(SpotubeIcons.download),
|
||||||
|
const SizedBox(width: 5),
|
||||||
PlatformText(
|
PlatformText(
|
||||||
"Download ${selectedTracks.isNotEmpty ? "(${selectedTracks.length})" : ""}",
|
"Download ${selectedTracks.isNotEmpty ? "(${selectedTracks.length})" : ""}",
|
||||||
),
|
),
|
||||||
@ -152,7 +154,8 @@ class TracksTableView extends HookConsumerWidget {
|
|||||||
value: "add-to-playlist",
|
value: "add-to-playlist",
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const Icon(Icons.playlist_add_rounded),
|
const Icon(SpotubeIcons.playlistAdd),
|
||||||
|
const SizedBox(width: 5),
|
||||||
PlatformText(
|
PlatformText(
|
||||||
"Add (${selectedTracks.length}) to Playlist",
|
"Add (${selectedTracks.length}) to Playlist",
|
||||||
),
|
),
|
||||||
@ -193,7 +196,7 @@ class TracksTableView extends HookConsumerWidget {
|
|||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: const Icon(Icons.more_vert),
|
child: const Icon(SpotubeIcons.moreVertical),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
],
|
],
|
||||||
|
@ -6,6 +6,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/shimmers/shimmer_artist_profile.dart';
|
import 'package:spotube/components/shared/shimmers/shimmer_artist_profile.dart';
|
||||||
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
||||||
import 'package:spotube/components/shared/track_table/track_tile.dart';
|
import 'package:spotube/components/shared/track_table/track_tile.dart';
|
||||||
@ -229,7 +230,7 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Add to blacklisted artists",
|
tooltip: "Add to blacklisted artists",
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.person_remove_rounded,
|
SpotubeIcons.userRemove,
|
||||||
color: !isBlackListed
|
color: !isBlackListed
|
||||||
? Colors.red[400]
|
? Colors.red[400]
|
||||||
: Colors.white,
|
: Colors.white,
|
||||||
@ -257,7 +258,7 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
icon: const Icon(Icons.share_rounded),
|
icon: const Icon(SpotubeIcons.share),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await Clipboard.setData(
|
await Clipboard.setData(
|
||||||
ClipboardData(
|
ClipboardData(
|
||||||
@ -343,8 +344,8 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
child: PlatformIconButton(
|
child: PlatformIconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
isPlaylistPlaying
|
isPlaylistPlaying
|
||||||
? Icons.stop_rounded
|
? SpotubeIcons.stop
|
||||||
: Icons.play_arrow_rounded,
|
: SpotubeIcons.play,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
onPressed: () =>
|
onPressed: () =>
|
||||||
|
@ -5,6 +5,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/shimmers/shimmer_lyrics.dart';
|
import 'package:spotube/components/shared/shimmers/shimmer_lyrics.dart';
|
||||||
import 'package:spotube/components/shared/spotube_marquee_text.dart';
|
import 'package:spotube/components/shared/spotube_marquee_text.dart';
|
||||||
import 'package:spotube/components/lyrics/lyric_delay_adjust_dialog.dart';
|
import 'package:spotube/components/lyrics/lyric_delay_adjust_dialog.dart';
|
||||||
@ -92,7 +93,7 @@ class SyncedLyrics extends HookConsumerWidget {
|
|||||||
alignment: Alignment.centerRight,
|
alignment: Alignment.centerRight,
|
||||||
child: PlatformFilledButton(
|
child: PlatformFilledButton(
|
||||||
child: const Icon(
|
child: const Icon(
|
||||||
Icons.av_timer_rounded,
|
SpotubeIcons.clock,
|
||||||
size: 16,
|
size: 16,
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
|
@ -7,6 +7,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/player/player_actions.dart';
|
import 'package:spotube/components/player/player_actions.dart';
|
||||||
import 'package:spotube/components/player/player_controls.dart';
|
import 'package:spotube/components/player/player_controls.dart';
|
||||||
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
||||||
@ -192,7 +193,7 @@ class PlayerView extends HookConsumerWidget {
|
|||||||
extraActions: [
|
extraActions: [
|
||||||
PlatformIconButton(
|
PlatformIconButton(
|
||||||
tooltip: "Open Lyrics",
|
tooltip: "Open Lyrics",
|
||||||
icon: const Icon(Icons.lyrics_rounded),
|
icon: const Icon(SpotubeIcons.lyrics),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
GoRouter.of(context).pop();
|
GoRouter.of(context).pop();
|
||||||
GoRouter.of(context).go('/lyrics');
|
GoRouter.of(context).go('/lyrics');
|
||||||
|
@ -5,6 +5,7 @@ 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:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/album/album_card.dart';
|
import 'package:spotube/components/album/album_card.dart';
|
||||||
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
|
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
|
||||||
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
|
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
|
||||||
@ -92,7 +93,7 @@ class SearchPage extends HookConsumerWidget {
|
|||||||
ref.read(searchTermStateProvider.notifier).state =
|
ref.read(searchTermStateProvider.notifier).state =
|
||||||
value;
|
value;
|
||||||
},
|
},
|
||||||
prefixIcon: Icons.search_rounded,
|
prefixIcon: SpotubeIcons.search,
|
||||||
prefixIconColor: PlatformProperty.only(
|
prefixIconColor: PlatformProperty.only(
|
||||||
ios:
|
ios:
|
||||||
PlatformTheme.of(context).textTheme?.caption?.color,
|
PlatformTheme.of(context).textTheme?.caption?.color,
|
||||||
|
@ -4,6 +4,7 @@ import 'package:collection/collection.dart';
|
|||||||
import 'package:fuzzywuzzy/fuzzywuzzy.dart';
|
import 'package:fuzzywuzzy/fuzzywuzzy.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
||||||
import 'package:spotube/provider/blacklist_provider.dart';
|
import 'package:spotube/provider/blacklist_provider.dart';
|
||||||
import 'package:tuple/tuple.dart';
|
import 'package:tuple/tuple.dart';
|
||||||
@ -50,7 +51,7 @@ class BlackListPage extends HookConsumerWidget {
|
|||||||
child: PlatformTextField(
|
child: PlatformTextField(
|
||||||
onChanged: (value) => searchText.value = value,
|
onChanged: (value) => searchText.value = value,
|
||||||
placeholder: "Search",
|
placeholder: "Search",
|
||||||
prefixIcon: Icons.search_rounded,
|
prefixIcon: SpotubeIcons.search,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
ListView.builder(
|
ListView.builder(
|
||||||
@ -63,8 +64,7 @@ class BlackListPage extends HookConsumerWidget {
|
|||||||
title: PlatformText("${item.name} (${item.type.name})"),
|
title: PlatformText("${item.name} (${item.type.name})"),
|
||||||
subtitle: PlatformText.caption(item.id),
|
subtitle: PlatformText.caption(item.id),
|
||||||
trailing: PlatformIconButton(
|
trailing: PlatformIconButton(
|
||||||
icon: Icon(Icons.delete_forever_rounded,
|
icon: Icon(SpotubeIcons.trash, color: Colors.red[400]),
|
||||||
color: Colors.red[400]),
|
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
ref
|
ref
|
||||||
.read(BlackListNotifier.provider.notifier)
|
.read(BlackListNotifier.provider.notifier)
|
||||||
|
@ -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:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/settings/color_scheme_picker_dialog.dart';
|
import 'package:spotube/components/settings/color_scheme_picker_dialog.dart';
|
||||||
import 'package:spotube/components/shared/adaptive/adaptive_list_tile.dart';
|
import 'package:spotube/components/shared/adaptive/adaptive_list_tile.dart';
|
||||||
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
||||||
@ -69,7 +70,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
if (auth.isAnonymous)
|
if (auth.isAnonymous)
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: Icon(
|
leading: Icon(
|
||||||
Icons.login_rounded,
|
SpotubeIcons.login,
|
||||||
color: PlatformTheme.of(context).primaryColor,
|
color: PlatformTheme.of(context).primaryColor,
|
||||||
),
|
),
|
||||||
title: SizedBox(
|
title: SizedBox(
|
||||||
@ -105,7 +106,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
Builder(builder: (context) {
|
Builder(builder: (context) {
|
||||||
Auth auth = ref.watch(authProvider);
|
Auth auth = ref.watch(authProvider);
|
||||||
return PlatformListTile(
|
return PlatformListTile(
|
||||||
leading: const Icon(Icons.logout_rounded),
|
leading: const Icon(SpotubeIcons.logout),
|
||||||
title: SizedBox(
|
title: SizedBox(
|
||||||
height: 50,
|
height: 50,
|
||||||
width: 180,
|
width: 180,
|
||||||
@ -140,7 +141,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
?.copyWith(fontWeight: FontWeight.bold),
|
?.copyWith(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: const Icon(Icons.dashboard_rounded),
|
leading: const Icon(SpotubeIcons.dashboard),
|
||||||
title: const PlatformText("Layout Mode"),
|
title: const PlatformText("Layout Mode"),
|
||||||
subtitle: const PlatformText(
|
subtitle: const PlatformText(
|
||||||
"Override responsive layout mode settings",
|
"Override responsive layout mode settings",
|
||||||
@ -175,7 +176,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: const Icon(Icons.dark_mode_outlined),
|
leading: const Icon(SpotubeIcons.darkMode),
|
||||||
title: const PlatformText("Theme"),
|
title: const PlatformText("Theme"),
|
||||||
trailing: (context, update) =>
|
trailing: (context, update) =>
|
||||||
PlatformDropDownMenu<ThemeMode>(
|
PlatformDropDownMenu<ThemeMode>(
|
||||||
@ -203,7 +204,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: const Icon(Icons.ad_units_rounded),
|
leading: const Icon(SpotubeIcons.platform),
|
||||||
title: const PlatformText("Mimic Platform"),
|
title: const PlatformText("Mimic Platform"),
|
||||||
trailing: (context, update) =>
|
trailing: (context, update) =>
|
||||||
DropdownButton<TargetPlatform>(
|
DropdownButton<TargetPlatform>(
|
||||||
@ -239,7 +240,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.palette_outlined),
|
leading: const Icon(SpotubeIcons.palette),
|
||||||
title: const PlatformText("Accent Color Scheme"),
|
title: const PlatformText("Accent Color Scheme"),
|
||||||
contentPadding: const EdgeInsets.symmetric(
|
contentPadding: const EdgeInsets.symmetric(
|
||||||
horizontal: 15,
|
horizontal: 15,
|
||||||
@ -253,7 +254,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
onTap: pickColorScheme(ColorSchemeType.accent),
|
onTap: pickColorScheme(ColorSchemeType.accent),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.format_color_fill_rounded),
|
leading: const Icon(SpotubeIcons.colorBucket),
|
||||||
title: const PlatformText("Background Color Scheme"),
|
title: const PlatformText("Background Color Scheme"),
|
||||||
contentPadding: const EdgeInsets.symmetric(
|
contentPadding: const EdgeInsets.symmetric(
|
||||||
horizontal: 15,
|
horizontal: 15,
|
||||||
@ -267,7 +268,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
onTap: pickColorScheme(ColorSchemeType.background),
|
onTap: pickColorScheme(ColorSchemeType.background),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.album_rounded),
|
leading: const Icon(SpotubeIcons.album),
|
||||||
title: const PlatformText("Rotating Album Art"),
|
title: const PlatformText("Rotating Album Art"),
|
||||||
trailing: PlatformSwitch(
|
trailing: PlatformSwitch(
|
||||||
value: preferences.rotatingAlbumArt,
|
value: preferences.rotatingAlbumArt,
|
||||||
@ -283,7 +284,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
?.copyWith(fontWeight: FontWeight.bold),
|
?.copyWith(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: const Icon(Icons.multitrack_audio_rounded),
|
leading: const Icon(SpotubeIcons.audioQuality),
|
||||||
title: const PlatformText("Audio Quality"),
|
title: const PlatformText("Audio Quality"),
|
||||||
trailing: (context, update) =>
|
trailing: (context, update) =>
|
||||||
PlatformDropDownMenu<AudioQuality>(
|
PlatformDropDownMenu<AudioQuality>(
|
||||||
@ -310,7 +311,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
if (kIsMobile)
|
if (kIsMobile)
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.download_for_offline_rounded),
|
leading: const Icon(SpotubeIcons.download),
|
||||||
title: const PlatformText(
|
title: const PlatformText(
|
||||||
"Pre download and play",
|
"Pre download and play",
|
||||||
),
|
),
|
||||||
@ -325,7 +326,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.fast_forward_rounded),
|
leading: const Icon(SpotubeIcons.fastForward),
|
||||||
title: const PlatformText(
|
title: const PlatformText(
|
||||||
"Skip non-music segments (SponsorBlock)",
|
"Skip non-music segments (SponsorBlock)",
|
||||||
),
|
),
|
||||||
@ -337,7 +338,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.playlist_remove_rounded),
|
leading: const Icon(SpotubeIcons.playlistRemove),
|
||||||
title: const PlatformText("Blacklist"),
|
title: const PlatformText("Blacklist"),
|
||||||
subtitle: const PlatformText(
|
subtitle: const PlatformText(
|
||||||
"Blacklisted tracks and artists",
|
"Blacklisted tracks and artists",
|
||||||
@ -345,7 +346,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
onTap: () {
|
onTap: () {
|
||||||
GoRouter.of(context).push("/settings/blacklist");
|
GoRouter.of(context).push("/settings/blacklist");
|
||||||
},
|
},
|
||||||
trailing: const Icon(Icons.chevron_right_rounded),
|
trailing: const Icon(SpotubeIcons.angleRight),
|
||||||
),
|
),
|
||||||
PlatformText(
|
PlatformText(
|
||||||
" Search",
|
" Search",
|
||||||
@ -354,7 +355,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
?.copyWith(fontWeight: FontWeight.bold),
|
?.copyWith(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: const Icon(Icons.shopping_bag_rounded),
|
leading: const Icon(SpotubeIcons.shoppingBag),
|
||||||
title: const PlatformText("Market Place"),
|
title: const PlatformText("Market Place"),
|
||||||
subtitle: PlatformText.caption(
|
subtitle: PlatformText.caption(
|
||||||
"Recommendation Country",
|
"Recommendation Country",
|
||||||
@ -382,7 +383,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: const Icon(Icons.screen_search_desktop_rounded),
|
leading: const Icon(SpotubeIcons.screenSearch),
|
||||||
title: const SizedBox(
|
title: const SizedBox(
|
||||||
height: 50,
|
height: 50,
|
||||||
width: 200,
|
width: 200,
|
||||||
@ -401,7 +402,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
child: PlatformTextField(
|
child: PlatformTextField(
|
||||||
controller: ytSearchFormatController,
|
controller: ytSearchFormatController,
|
||||||
suffix: PlatformFilledButton(
|
suffix: PlatformFilledButton(
|
||||||
child: const Icon(Icons.save_rounded),
|
child: const Icon(SpotubeIcons.save),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
preferences.setYtSearchFormat(
|
preferences.setYtSearchFormat(
|
||||||
ytSearchFormatController.value.text,
|
ytSearchFormatController.value.text,
|
||||||
@ -416,7 +417,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: const Icon(Icons.low_priority_rounded),
|
leading: const Icon(SpotubeIcons.barChart),
|
||||||
title: SizedBox(
|
title: SizedBox(
|
||||||
height: 50,
|
height: 50,
|
||||||
width: 180,
|
width: 180,
|
||||||
@ -465,17 +466,17 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
?.copyWith(fontWeight: FontWeight.bold),
|
?.copyWith(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.file_download_outlined),
|
leading: const Icon(SpotubeIcons.download),
|
||||||
title: const PlatformText("Download Location"),
|
title: const PlatformText("Download Location"),
|
||||||
subtitle: PlatformText(preferences.downloadLocation),
|
subtitle: PlatformText(preferences.downloadLocation),
|
||||||
trailing: PlatformFilledButton(
|
trailing: PlatformFilledButton(
|
||||||
onPressed: pickDownloadLocation,
|
onPressed: pickDownloadLocation,
|
||||||
child: const Icon(Icons.folder_rounded),
|
child: const Icon(SpotubeIcons.folder),
|
||||||
),
|
),
|
||||||
onTap: pickDownloadLocation,
|
onTap: pickDownloadLocation,
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.lyrics_rounded),
|
leading: const Icon(SpotubeIcons.lyrics),
|
||||||
title: const PlatformText(
|
title: const PlatformText(
|
||||||
"Download lyrics along with the Track"),
|
"Download lyrics along with the Track"),
|
||||||
trailing: PlatformSwitch(
|
trailing: PlatformSwitch(
|
||||||
@ -493,7 +494,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
AdaptiveListTile(
|
AdaptiveListTile(
|
||||||
leading: const Icon(
|
leading: const Icon(
|
||||||
Icons.favorite_border_rounded,
|
SpotubeIcons.heart,
|
||||||
color: Colors.pink,
|
color: Colors.pink,
|
||||||
),
|
),
|
||||||
title: const SizedBox(
|
title: const SizedBox(
|
||||||
@ -529,7 +530,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: const [
|
children: const [
|
||||||
Icon(Icons.favorite_outline_rounded),
|
Icon(SpotubeIcons.heart),
|
||||||
SizedBox(width: 5),
|
SizedBox(width: 5),
|
||||||
PlatformText("Please Sponsor/Donate"),
|
PlatformText("Please Sponsor/Donate"),
|
||||||
],
|
],
|
||||||
@ -537,7 +538,7 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.update_rounded),
|
leading: const Icon(SpotubeIcons.update),
|
||||||
title: const PlatformText("Check for Update"),
|
title: const PlatformText("Check for Update"),
|
||||||
trailing: PlatformSwitch(
|
trailing: PlatformSwitch(
|
||||||
value: preferences.checkUpdate,
|
value: preferences.checkUpdate,
|
||||||
@ -546,9 +547,9 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.info_outline_rounded),
|
leading: const Icon(SpotubeIcons.info),
|
||||||
title: const PlatformText("About Spotube"),
|
title: const PlatformText("About Spotube"),
|
||||||
trailing: const Icon(Icons.arrow_forward_ios_rounded),
|
trailing: const Icon(SpotubeIcons.angleRight),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
GoRouter.of(context).push("/settings/about");
|
GoRouter.of(context).push("/settings/about");
|
||||||
},
|
},
|
||||||
|
@ -24,14 +24,17 @@ ThemeData darkTheme({
|
|||||||
buttonTheme: ButtonThemeData(
|
buttonTheme: ButtonThemeData(
|
||||||
buttonColor: accentMaterialColor,
|
buttonColor: accentMaterialColor,
|
||||||
),
|
),
|
||||||
|
iconTheme: IconThemeData(size: 16, color: Colors.grey[50]),
|
||||||
inputDecorationTheme: InputDecorationTheme(
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
focusedBorder: OutlineInputBorder(
|
focusedBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(20),
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
color: accentMaterialColor[400]!,
|
color: accentMaterialColor[400]!,
|
||||||
width: 2.0,
|
width: 2.0,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
enabledBorder: OutlineInputBorder(
|
enabledBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(20),
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
color: backgroundMaterialColor[800]!,
|
color: backgroundMaterialColor[800]!,
|
||||||
),
|
),
|
||||||
@ -39,8 +42,15 @@ ThemeData darkTheme({
|
|||||||
),
|
),
|
||||||
navigationRailTheme: NavigationRailThemeData(
|
navigationRailTheme: NavigationRailThemeData(
|
||||||
backgroundColor: backgroundMaterialColor[800],
|
backgroundColor: backgroundMaterialColor[800],
|
||||||
unselectedIconTheme: IconThemeData(color: Colors.grey[300], opacity: 1),
|
unselectedIconTheme: IconThemeData(
|
||||||
selectedIconTheme: IconThemeData(color: backgroundMaterialColor[850]),
|
color: Colors.grey[300],
|
||||||
|
opacity: 1,
|
||||||
|
size: 18,
|
||||||
|
),
|
||||||
|
selectedIconTheme: IconThemeData(
|
||||||
|
color: backgroundMaterialColor[850],
|
||||||
|
size: 18,
|
||||||
|
),
|
||||||
selectedLabelTextStyle: TextStyle(color: accentMaterialColor[300]),
|
selectedLabelTextStyle: TextStyle(color: accentMaterialColor[300]),
|
||||||
unselectedLabelTextStyle: TextStyle(color: Colors.grey[300]),
|
unselectedLabelTextStyle: TextStyle(color: Colors.grey[300]),
|
||||||
indicatorColor: accentMaterialColor[300],
|
indicatorColor: accentMaterialColor[300],
|
||||||
@ -49,6 +59,19 @@ ThemeData darkTheme({
|
|||||||
backgroundColor: backgroundMaterialColor[800],
|
backgroundColor: backgroundMaterialColor[800],
|
||||||
height: 55,
|
height: 55,
|
||||||
indicatorColor: accentMaterialColor[300],
|
indicatorColor: accentMaterialColor[300],
|
||||||
|
labelBehavior: NavigationDestinationLabelBehavior.alwaysHide,
|
||||||
|
iconTheme: MaterialStateProperty.resolveWith((states) {
|
||||||
|
if (states.contains(MaterialState.selected)) {
|
||||||
|
return IconThemeData(
|
||||||
|
color: Colors.grey[900],
|
||||||
|
size: 18,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return IconThemeData(
|
||||||
|
color: Colors.grey[300],
|
||||||
|
size: 18,
|
||||||
|
);
|
||||||
|
}),
|
||||||
),
|
),
|
||||||
cardTheme: CardTheme(
|
cardTheme: CardTheme(
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
|
||||||
@ -79,6 +102,7 @@ ThemeData darkTheme({
|
|||||||
if (states.contains(MaterialState.selected)) {
|
if (states.contains(MaterialState.selected)) {
|
||||||
return accentMaterialColor[500];
|
return accentMaterialColor[500];
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
tabBarTheme: TabBarTheme(
|
tabBarTheme: TabBarTheme(
|
||||||
|
@ -50,24 +50,35 @@ ThemeData lightTheme({
|
|||||||
iconColor: Colors.grey[850],
|
iconColor: Colors.grey[850],
|
||||||
horizontalTitleGap: 0,
|
horizontalTitleGap: 0,
|
||||||
),
|
),
|
||||||
|
iconTheme: const IconThemeData(size: 16),
|
||||||
inputDecorationTheme: InputDecorationTheme(
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
|
isDense: true,
|
||||||
focusedBorder: OutlineInputBorder(
|
focusedBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(20),
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
color: accentMaterialColor[400]!,
|
color: accentMaterialColor[400]!,
|
||||||
width: 2.0,
|
width: 2.0,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
enabledBorder: OutlineInputBorder(
|
enabledBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(20),
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
color: Colors.grey[800]!,
|
color: Colors.grey[600]!,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
navigationRailTheme: NavigationRailThemeData(
|
navigationRailTheme: NavigationRailThemeData(
|
||||||
backgroundColor: backgroundMaterialColor[100],
|
backgroundColor: backgroundMaterialColor[100],
|
||||||
indicatorColor: accentMaterialColor[300],
|
indicatorColor: accentMaterialColor[300],
|
||||||
selectedIconTheme: IconThemeData(color: accentMaterialColor[850]),
|
selectedIconTheme: IconThemeData(
|
||||||
unselectedIconTheme: IconThemeData(color: Colors.grey[850], opacity: 1),
|
color: accentMaterialColor[850],
|
||||||
|
size: 18,
|
||||||
|
),
|
||||||
|
unselectedIconTheme: IconThemeData(
|
||||||
|
color: Colors.grey[850],
|
||||||
|
opacity: 1,
|
||||||
|
size: 18,
|
||||||
|
),
|
||||||
unselectedLabelTextStyle: TextStyle(
|
unselectedLabelTextStyle: TextStyle(
|
||||||
color: Colors.grey[850],
|
color: Colors.grey[850],
|
||||||
),
|
),
|
||||||
@ -77,8 +88,9 @@ ThemeData lightTheme({
|
|||||||
height: 55,
|
height: 55,
|
||||||
indicatorColor: accentMaterialColor[300],
|
indicatorColor: accentMaterialColor[300],
|
||||||
iconTheme: MaterialStateProperty.all(
|
iconTheme: MaterialStateProperty.all(
|
||||||
IconThemeData(color: Colors.grey[850]),
|
IconThemeData(color: Colors.grey[850], size: 18),
|
||||||
),
|
),
|
||||||
|
labelBehavior: NavigationDestinationLabelBehavior.alwaysHide,
|
||||||
),
|
),
|
||||||
cardTheme: CardTheme(
|
cardTheme: CardTheme(
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
|
||||||
@ -122,6 +134,7 @@ ThemeData lightTheme({
|
|||||||
}
|
}
|
||||||
|
|
||||||
final windowsTheme = fluent_ui.ThemeData.light().copyWith(
|
final windowsTheme = fluent_ui.ThemeData.light().copyWith(
|
||||||
|
iconTheme: const IconThemeData(size: 16),
|
||||||
buttonTheme: fluent_ui.ButtonThemeData(
|
buttonTheme: fluent_ui.ButtonThemeData(
|
||||||
iconButtonStyle: fluent_ui.ButtonStyle(
|
iconButtonStyle: fluent_ui.ButtonStyle(
|
||||||
iconSize: fluent_ui.ButtonState.all(20),
|
iconSize: fluent_ui.ButtonState.all(20),
|
||||||
@ -129,6 +142,7 @@ final windowsTheme = fluent_ui.ThemeData.light().copyWith(
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
final windowsDarkTheme = fluent_ui.ThemeData.dark().copyWith(
|
final windowsDarkTheme = fluent_ui.ThemeData.dark().copyWith(
|
||||||
|
iconTheme: const IconThemeData(size: 16),
|
||||||
buttonTheme: fluent_ui.ButtonThemeData(
|
buttonTheme: fluent_ui.ButtonThemeData(
|
||||||
iconButtonStyle: fluent_ui.ButtonStyle(
|
iconButtonStyle: fluent_ui.ButtonStyle(
|
||||||
iconSize: fluent_ui.ButtonState.all(20),
|
iconSize: fluent_ui.ButtonState.all(20),
|
||||||
@ -139,14 +153,14 @@ final macosTheme = MacosThemeData.light().copyWith(
|
|||||||
pushButtonTheme: const PushButtonThemeData(
|
pushButtonTheme: const PushButtonThemeData(
|
||||||
secondaryColor: Colors.white,
|
secondaryColor: Colors.white,
|
||||||
),
|
),
|
||||||
iconTheme: const MacosIconThemeData(size: 14),
|
iconTheme: const MacosIconThemeData(size: 16),
|
||||||
typography: MacosTypography(color: Colors.grey[900]!),
|
typography: MacosTypography(color: Colors.grey[900]!),
|
||||||
);
|
);
|
||||||
final macosDarkTheme = MacosThemeData.dark().copyWith(
|
final macosDarkTheme = MacosThemeData.dark().copyWith(
|
||||||
pushButtonTheme: const PushButtonThemeData(
|
pushButtonTheme: const PushButtonThemeData(
|
||||||
secondaryColor: Colors.white,
|
secondaryColor: Colors.white,
|
||||||
),
|
),
|
||||||
iconTheme: const MacosIconThemeData(size: 14),
|
iconTheme: const MacosIconThemeData(size: 16),
|
||||||
typography: MacosTypography(color: MacosColors.textColor),
|
typography: MacosTypography(color: MacosColors.textColor),
|
||||||
);
|
);
|
||||||
const iosTheme = CupertinoThemeData(brightness: Brightness.light);
|
const iosTheme = CupertinoThemeData(brightness: Brightness.light);
|
||||||
@ -156,6 +170,7 @@ const iosDarkTheme = CupertinoThemeData(
|
|||||||
|
|
||||||
final linuxTheme = AdwaitaThemeData.light().copyWith(
|
final linuxTheme = AdwaitaThemeData.light().copyWith(
|
||||||
primaryColor: const Color(0xFF3582e5),
|
primaryColor: const Color(0xFF3582e5),
|
||||||
|
iconTheme: const IconThemeData(size: 16),
|
||||||
extensions: [
|
extensions: [
|
||||||
ShimmerColorTheme(
|
ShimmerColorTheme(
|
||||||
shimmerBackgroundColor: Colors.grey[300],
|
shimmerBackgroundColor: Colors.grey[300],
|
||||||
@ -182,6 +197,7 @@ final linuxTheme = AdwaitaThemeData.light().copyWith(
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
final linuxDarkTheme = AdwaitaThemeData.dark().copyWith(
|
final linuxDarkTheme = AdwaitaThemeData.dark().copyWith(
|
||||||
|
iconTheme: IconThemeData(size: 16, color: Colors.grey[50]),
|
||||||
extensions: [
|
extensions: [
|
||||||
ShimmerColorTheme(
|
ShimmerColorTheme(
|
||||||
shimmerBackgroundColor: Colors.grey[800],
|
shimmerBackgroundColor: Colors.grey[800],
|
||||||
|
14
pubspec.lock
14
pubspec.lock
@ -484,6 +484,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.3"
|
version: "4.0.3"
|
||||||
|
fluentui_system_icons:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: fluentui_system_icons
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.189"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -524,6 +531,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.2"
|
version: "0.0.2"
|
||||||
|
flutter_feather_icons:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_feather_icons
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0+1"
|
||||||
flutter_hooks:
|
flutter_hooks:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -70,6 +70,8 @@ dependencies:
|
|||||||
url: https://github.com/google/flutter-desktop-embedding.git
|
url: https://github.com/google/flutter-desktop-embedding.git
|
||||||
ref: a738913c8ce2c9f47515382d40827e794a334274
|
ref: a738913c8ce2c9f47515382d40827e794a334274
|
||||||
path: plugins/window_size
|
path: plugins/window_size
|
||||||
|
flutter_feather_icons: ^2.0.0+1
|
||||||
|
fluentui_system_icons: ^1.1.189
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
// gestures. You can also use WidgetTester to find child widgets in the widget
|
// gestures. You can also use WidgetTester to find child widgets in the widget
|
||||||
// tree, read text, and verify that the values of widget properties are correct.
|
// tree, read text, and verify that the values of widget properties are correct.
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
|
|
||||||
import 'package:spotube/main.dart';
|
import 'package:spotube/main.dart';
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ void main() {
|
|||||||
expect(find.text('1'), findsNothing);
|
expect(find.text('1'), findsNothing);
|
||||||
|
|
||||||
// Tap the '+' icon and trigger a frame.
|
// Tap the '+' icon and trigger a frame.
|
||||||
await tester.tap(find.byIcon(Icons.add));
|
await tester.tap(find.byIcon(SpotubeIcons.add));
|
||||||
await tester.pump();
|
await tester.pump();
|
||||||
|
|
||||||
// Verify that our counter has incremented.
|
// Verify that our counter has incremented.
|
||||||
|
Loading…
Reference in New Issue
Block a user