mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
fix(mobile): SafeArea bugs and back button color
This commit is contained in:
parent
3b6bf27a98
commit
a8330ef2e1
@ -11,6 +11,7 @@ import 'package:spotube/components/Shared/Waypoint.dart';
|
||||
import 'package:spotube/provider/SpotifyDI.dart';
|
||||
import 'package:spotube/provider/SpotifyRequests.dart';
|
||||
import 'package:spotube/provider/UserPreferences.dart';
|
||||
import 'package:spotube/utils/platform.dart';
|
||||
|
||||
class Genres extends HookConsumerWidget {
|
||||
const Genres({Key? key}) : super(key: key);
|
||||
@ -43,7 +44,7 @@ class Genres extends HookConsumerWidget {
|
||||
];
|
||||
|
||||
return PlatformScaffold(
|
||||
appBar: PageWindowTitleBar(),
|
||||
appBar: kIsDesktop ? PageWindowTitleBar() : null,
|
||||
body: ListView.builder(
|
||||
itemCount: categories.length,
|
||||
itemBuilder: (context, index) {
|
||||
|
@ -23,26 +23,28 @@ class UserLibrary extends HookConsumerWidget {
|
||||
const UserAlbums(),
|
||||
][index.value];
|
||||
|
||||
return PlatformScaffold(
|
||||
appBar: PageWindowTitleBar(
|
||||
titleWidth: 347,
|
||||
centerTitle: true,
|
||||
center: PlatformTabBar(
|
||||
androidIsScrollable: true,
|
||||
selectedIndex: index.value,
|
||||
onSelectedIndexChanged: (value) => index.value = value,
|
||||
isNavigational:
|
||||
PlatformProperty.byPlatformGroup(mobile: false, desktop: true),
|
||||
tabs: [
|
||||
PlatformTab(label: 'Playlists', icon: const SizedBox.shrink()),
|
||||
PlatformTab(label: 'Tracks', icon: const SizedBox.shrink()),
|
||||
PlatformTab(label: 'Downloads', icon: const SizedBox.shrink()),
|
||||
PlatformTab(label: 'Artists', icon: const SizedBox.shrink()),
|
||||
PlatformTab(label: 'Albums', icon: const SizedBox.shrink()),
|
||||
],
|
||||
return SafeArea(
|
||||
child: PlatformScaffold(
|
||||
appBar: PageWindowTitleBar(
|
||||
titleWidth: 347,
|
||||
centerTitle: true,
|
||||
center: PlatformTabBar(
|
||||
androidIsScrollable: true,
|
||||
selectedIndex: index.value,
|
||||
onSelectedIndexChanged: (value) => index.value = value,
|
||||
isNavigational:
|
||||
PlatformProperty.byPlatformGroup(mobile: false, desktop: true),
|
||||
tabs: [
|
||||
PlatformTab(label: 'Playlists', icon: const SizedBox.shrink()),
|
||||
PlatformTab(label: 'Tracks', icon: const SizedBox.shrink()),
|
||||
PlatformTab(label: 'Downloads', icon: const SizedBox.shrink()),
|
||||
PlatformTab(label: 'Artists', icon: const SizedBox.shrink()),
|
||||
PlatformTab(label: 'Albums', icon: const SizedBox.shrink()),
|
||||
],
|
||||
),
|
||||
),
|
||||
body: body,
|
||||
),
|
||||
body: body,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ class PlayerOverlay extends HookConsumerWidget {
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
PlatformIconButton(
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
Icons.skip_previous_rounded,
|
||||
color: paletteColor.bodyTextColor,
|
||||
@ -91,7 +91,7 @@ class PlayerOverlay extends HookConsumerWidget {
|
||||
}),
|
||||
Consumer(
|
||||
builder: (context, ref, _) {
|
||||
return PlatformIconButton(
|
||||
return IconButton(
|
||||
icon: Icon(
|
||||
ref.read(playbackProvider).isPlaying
|
||||
? Icons.pause_rounded
|
||||
@ -105,7 +105,7 @@ class PlayerOverlay extends HookConsumerWidget {
|
||||
);
|
||||
},
|
||||
),
|
||||
PlatformIconButton(
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
Icons.skip_next_rounded,
|
||||
color: paletteColor.bodyTextColor,
|
||||
|
@ -73,292 +73,299 @@ class Search extends HookConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
return PlatformScaffold(
|
||||
appBar: !kIsMacOS ? PageWindowTitleBar() : null,
|
||||
body: auth.isAnonymous
|
||||
? const AnonymousFallback()
|
||||
: Column(
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 20,
|
||||
vertical: 10,
|
||||
return SafeArea(
|
||||
child: PlatformScaffold(
|
||||
appBar: kIsDesktop && !kIsMacOS ? PageWindowTitleBar() : null,
|
||||
body: auth.isAnonymous
|
||||
? const AnonymousFallback()
|
||||
: Column(
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 20,
|
||||
vertical: 10,
|
||||
),
|
||||
child: PlatformTextField(
|
||||
onChanged: (value) {
|
||||
ref.read(searchTermStateProvider.notifier).state =
|
||||
value;
|
||||
},
|
||||
prefixIcon: Icons.search_rounded,
|
||||
prefixIconColor: PlatformProperty.only(
|
||||
ios:
|
||||
PlatformTheme.of(context).textTheme?.caption?.color,
|
||||
other: null,
|
||||
).resolve(platform!),
|
||||
placeholder: "Search...",
|
||||
onSubmitted: (value) {
|
||||
onSearch();
|
||||
},
|
||||
),
|
||||
),
|
||||
child: PlatformTextField(
|
||||
onChanged: (value) {
|
||||
ref.read(searchTermStateProvider.notifier).state = value;
|
||||
},
|
||||
prefixIcon: Icons.search_rounded,
|
||||
prefixIconColor: PlatformProperty.only(
|
||||
ios: PlatformTheme.of(context).textTheme?.caption?.color,
|
||||
other: null,
|
||||
).resolve(platform!),
|
||||
placeholder: "Search...",
|
||||
onSubmitted: (value) {
|
||||
onSearch();
|
||||
},
|
||||
),
|
||||
),
|
||||
HookBuilder(
|
||||
builder: (context) {
|
||||
Playback playback = ref.watch(playbackProvider);
|
||||
List<AlbumSimple> albums = [];
|
||||
List<Artist> artists = [];
|
||||
List<Track> tracks = [];
|
||||
List<PlaylistSimple> playlists = [];
|
||||
final pages = [
|
||||
...searchTrack.pages,
|
||||
...searchAlbum.pages,
|
||||
...searchPlaylist.pages,
|
||||
...searchArtist.pages,
|
||||
].expand<Page>((page) => page ?? []).toList();
|
||||
for (MapEntry<int, Page> page in pages.asMap().entries) {
|
||||
for (var item in page.value.items ?? []) {
|
||||
if (item is AlbumSimple) {
|
||||
albums.add(item);
|
||||
} else if (item is PlaylistSimple) {
|
||||
playlists.add(item);
|
||||
} else if (item is Artist) {
|
||||
artists.add(item);
|
||||
} else if (item is Track) {
|
||||
tracks.add(item);
|
||||
HookBuilder(
|
||||
builder: (context) {
|
||||
Playback playback = ref.watch(playbackProvider);
|
||||
List<AlbumSimple> albums = [];
|
||||
List<Artist> artists = [];
|
||||
List<Track> tracks = [];
|
||||
List<PlaylistSimple> playlists = [];
|
||||
final pages = [
|
||||
...searchTrack.pages,
|
||||
...searchAlbum.pages,
|
||||
...searchPlaylist.pages,
|
||||
...searchArtist.pages,
|
||||
].expand<Page>((page) => page ?? []).toList();
|
||||
for (MapEntry<int, Page> page in pages.asMap().entries) {
|
||||
for (var item in page.value.items ?? []) {
|
||||
if (item is AlbumSimple) {
|
||||
albums.add(item);
|
||||
} else if (item is PlaylistSimple) {
|
||||
playlists.add(item);
|
||||
} else if (item is Artist) {
|
||||
artists.add(item);
|
||||
} else if (item is Track) {
|
||||
tracks.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 8,
|
||||
horizontal: 20,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (tracks.isNotEmpty)
|
||||
PlatformText.headline("Songs"),
|
||||
if (searchTrack.isLoading &&
|
||||
!searchTrack.isFetchingNextPage)
|
||||
const PlatformCircularProgressIndicator()
|
||||
else if (searchTrack.hasError)
|
||||
PlatformText(searchTrack
|
||||
.error?[searchTrack.pageParams.last])
|
||||
else
|
||||
...tracks.asMap().entries.map((track) {
|
||||
String duration =
|
||||
"${track.value.duration?.inMinutes.remainder(60)}:${PrimitiveUtils.zeroPadNumStr(track.value.duration?.inSeconds.remainder(60) ?? 0)}";
|
||||
return TrackTile(
|
||||
playback,
|
||||
track: track,
|
||||
duration: duration,
|
||||
isActive:
|
||||
playback.track?.id == track.value.id,
|
||||
onTrackPlayButtonPressed:
|
||||
(currentTrack) async {
|
||||
var isPlaylistPlaying =
|
||||
playback.playlist?.id != null &&
|
||||
playback.playlist?.id ==
|
||||
currentTrack.id;
|
||||
if (!isPlaylistPlaying) {
|
||||
playback.playPlaylist(
|
||||
CurrentPlaylist(
|
||||
tracks: [currentTrack],
|
||||
id: currentTrack.id!,
|
||||
name: currentTrack.name!,
|
||||
thumbnail: TypeConversionUtils
|
||||
.image_X_UrlString(
|
||||
currentTrack.album?.images,
|
||||
placeholder:
|
||||
ImagePlaceholder.albumArt,
|
||||
),
|
||||
),
|
||||
);
|
||||
} else if (isPlaylistPlaying &&
|
||||
currentTrack.id != null &&
|
||||
currentTrack.id !=
|
||||
playback.track?.id) {
|
||||
playback.play(currentTrack);
|
||||
}
|
||||
},
|
||||
);
|
||||
}),
|
||||
if (searchTrack.hasNextPage && tracks.isNotEmpty)
|
||||
Center(
|
||||
child: PlatformTextButton(
|
||||
onPressed: searchTrack.isFetchingNextPage
|
||||
? null
|
||||
: () => searchTrack.fetchNextPage(),
|
||||
child: searchTrack.isFetchingNextPage
|
||||
? const PlatformCircularProgressIndicator()
|
||||
: const PlatformText("Load more"),
|
||||
),
|
||||
),
|
||||
if (playlists.isNotEmpty)
|
||||
PlatformText.headline("Playlists"),
|
||||
const SizedBox(height: 10),
|
||||
if (searchPlaylist.isLoading &&
|
||||
!searchPlaylist.isFetchingNextPage)
|
||||
const PlatformCircularProgressIndicator()
|
||||
else if (searchPlaylist.hasError)
|
||||
PlatformText(searchPlaylist
|
||||
.error?[searchPlaylist.pageParams.last])
|
||||
else
|
||||
ScrollConfiguration(
|
||||
behavior:
|
||||
ScrollConfiguration.of(context).copyWith(
|
||||
dragDevices: {
|
||||
PointerDeviceKind.touch,
|
||||
PointerDeviceKind.mouse,
|
||||
},
|
||||
),
|
||||
child: Scrollbar(
|
||||
scrollbarOrientation:
|
||||
breakpoint > Breakpoints.md
|
||||
? ScrollbarOrientation.bottom
|
||||
: ScrollbarOrientation.top,
|
||||
controller: playlistController,
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
controller: playlistController,
|
||||
child: Row(
|
||||
children: [
|
||||
...playlists.mapIndexed(
|
||||
(i, playlist) {
|
||||
if (i == playlists.length - 1 &&
|
||||
searchPlaylist.hasNextPage) {
|
||||
return Waypoint(
|
||||
onEnter: () {
|
||||
searchPlaylist
|
||||
.fetchNextPage();
|
||||
},
|
||||
child:
|
||||
const ShimmerPlaybuttonCard(
|
||||
count: 1),
|
||||
);
|
||||
}
|
||||
return PlaylistCard(playlist);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
if (artists.isNotEmpty)
|
||||
PlatformText.headline("Artists"),
|
||||
const SizedBox(height: 10),
|
||||
if (searchArtist.isLoading &&
|
||||
!searchArtist.isFetchingNextPage)
|
||||
const PlatformCircularProgressIndicator()
|
||||
else if (searchArtist.hasError)
|
||||
PlatformText(searchArtist
|
||||
.error?[searchArtist.pageParams.last])
|
||||
else
|
||||
ScrollConfiguration(
|
||||
behavior:
|
||||
ScrollConfiguration.of(context).copyWith(
|
||||
dragDevices: {
|
||||
PointerDeviceKind.touch,
|
||||
PointerDeviceKind.mouse,
|
||||
},
|
||||
),
|
||||
child: Scrollbar(
|
||||
controller: artistController,
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
controller: artistController,
|
||||
child: Row(
|
||||
children: [
|
||||
...artists.mapIndexed(
|
||||
(i, artist) {
|
||||
if (i == artists.length - 1 &&
|
||||
searchArtist.hasNextPage) {
|
||||
return Waypoint(
|
||||
onEnter: () {
|
||||
searchArtist
|
||||
.fetchNextPage();
|
||||
},
|
||||
child:
|
||||
const ShimmerPlaybuttonCard(
|
||||
count: 1),
|
||||
);
|
||||
}
|
||||
return Container(
|
||||
margin:
|
||||
const EdgeInsets.symmetric(
|
||||
horizontal: 15),
|
||||
child: ArtistCard(artist),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
if (albums.isNotEmpty)
|
||||
PlatformText(
|
||||
"Albums",
|
||||
style: Theme.of(context).textTheme.headline5,
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
if (searchAlbum.isLoading &&
|
||||
!searchAlbum.isFetchingNextPage)
|
||||
const PlatformCircularProgressIndicator()
|
||||
else if (searchAlbum.hasError)
|
||||
PlatformText(searchAlbum
|
||||
.error?[searchAlbum.pageParams.last])
|
||||
else
|
||||
ScrollConfiguration(
|
||||
behavior:
|
||||
ScrollConfiguration.of(context).copyWith(
|
||||
dragDevices: {
|
||||
PointerDeviceKind.touch,
|
||||
PointerDeviceKind.mouse,
|
||||
},
|
||||
),
|
||||
child: Scrollbar(
|
||||
controller: albumController,
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
controller: albumController,
|
||||
child: Row(
|
||||
children: [
|
||||
...albums.mapIndexed((i, album) {
|
||||
if (i == albums.length - 1 &&
|
||||
searchAlbum.hasNextPage) {
|
||||
return Waypoint(
|
||||
onEnter: () {
|
||||
searchAlbum.fetchNextPage();
|
||||
},
|
||||
child:
|
||||
const ShimmerPlaybuttonCard(
|
||||
count: 1),
|
||||
);
|
||||
}
|
||||
return AlbumCard(
|
||||
TypeConversionUtils
|
||||
.simpleAlbum_X_Album(
|
||||
album,
|
||||
return Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 8,
|
||||
horizontal: 20,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (tracks.isNotEmpty)
|
||||
PlatformText.headline("Songs"),
|
||||
if (searchTrack.isLoading &&
|
||||
!searchTrack.isFetchingNextPage)
|
||||
const PlatformCircularProgressIndicator()
|
||||
else if (searchTrack.hasError)
|
||||
PlatformText(searchTrack
|
||||
.error?[searchTrack.pageParams.last])
|
||||
else
|
||||
...tracks.asMap().entries.map((track) {
|
||||
String duration =
|
||||
"${track.value.duration?.inMinutes.remainder(60)}:${PrimitiveUtils.zeroPadNumStr(track.value.duration?.inSeconds.remainder(60) ?? 0)}";
|
||||
return TrackTile(
|
||||
playback,
|
||||
track: track,
|
||||
duration: duration,
|
||||
isActive:
|
||||
playback.track?.id == track.value.id,
|
||||
onTrackPlayButtonPressed:
|
||||
(currentTrack) async {
|
||||
var isPlaylistPlaying =
|
||||
playback.playlist?.id != null &&
|
||||
playback.playlist?.id ==
|
||||
currentTrack.id;
|
||||
if (!isPlaylistPlaying) {
|
||||
playback.playPlaylist(
|
||||
CurrentPlaylist(
|
||||
tracks: [currentTrack],
|
||||
id: currentTrack.id!,
|
||||
name: currentTrack.name!,
|
||||
thumbnail: TypeConversionUtils
|
||||
.image_X_UrlString(
|
||||
currentTrack.album?.images,
|
||||
placeholder:
|
||||
ImagePlaceholder.albumArt,
|
||||
),
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else if (isPlaylistPlaying &&
|
||||
currentTrack.id != null &&
|
||||
currentTrack.id !=
|
||||
playback.track?.id) {
|
||||
playback.play(currentTrack);
|
||||
}
|
||||
},
|
||||
);
|
||||
}),
|
||||
if (searchTrack.hasNextPage &&
|
||||
tracks.isNotEmpty)
|
||||
Center(
|
||||
child: PlatformTextButton(
|
||||
onPressed: searchTrack.isFetchingNextPage
|
||||
? null
|
||||
: () => searchTrack.fetchNextPage(),
|
||||
child: searchTrack.isFetchingNextPage
|
||||
? const PlatformCircularProgressIndicator()
|
||||
: const PlatformText("Load more"),
|
||||
),
|
||||
),
|
||||
if (playlists.isNotEmpty)
|
||||
PlatformText.headline("Playlists"),
|
||||
const SizedBox(height: 10),
|
||||
if (searchPlaylist.isLoading &&
|
||||
!searchPlaylist.isFetchingNextPage)
|
||||
const PlatformCircularProgressIndicator()
|
||||
else if (searchPlaylist.hasError)
|
||||
PlatformText(searchPlaylist
|
||||
.error?[searchPlaylist.pageParams.last])
|
||||
else
|
||||
ScrollConfiguration(
|
||||
behavior: ScrollConfiguration.of(context)
|
||||
.copyWith(
|
||||
dragDevices: {
|
||||
PointerDeviceKind.touch,
|
||||
PointerDeviceKind.mouse,
|
||||
},
|
||||
),
|
||||
child: Scrollbar(
|
||||
scrollbarOrientation:
|
||||
breakpoint > Breakpoints.md
|
||||
? ScrollbarOrientation.bottom
|
||||
: ScrollbarOrientation.top,
|
||||
controller: playlistController,
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
controller: playlistController,
|
||||
child: Row(
|
||||
children: [
|
||||
...playlists.mapIndexed(
|
||||
(i, playlist) {
|
||||
if (i == playlists.length - 1 &&
|
||||
searchPlaylist
|
||||
.hasNextPage) {
|
||||
return Waypoint(
|
||||
onEnter: () {
|
||||
searchPlaylist
|
||||
.fetchNextPage();
|
||||
},
|
||||
child:
|
||||
const ShimmerPlaybuttonCard(
|
||||
count: 1),
|
||||
);
|
||||
}
|
||||
return PlaylistCard(playlist);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
const SizedBox(height: 20),
|
||||
if (artists.isNotEmpty)
|
||||
PlatformText.headline("Artists"),
|
||||
const SizedBox(height: 10),
|
||||
if (searchArtist.isLoading &&
|
||||
!searchArtist.isFetchingNextPage)
|
||||
const PlatformCircularProgressIndicator()
|
||||
else if (searchArtist.hasError)
|
||||
PlatformText(searchArtist
|
||||
.error?[searchArtist.pageParams.last])
|
||||
else
|
||||
ScrollConfiguration(
|
||||
behavior: ScrollConfiguration.of(context)
|
||||
.copyWith(
|
||||
dragDevices: {
|
||||
PointerDeviceKind.touch,
|
||||
PointerDeviceKind.mouse,
|
||||
},
|
||||
),
|
||||
child: Scrollbar(
|
||||
controller: artistController,
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
controller: artistController,
|
||||
child: Row(
|
||||
children: [
|
||||
...artists.mapIndexed(
|
||||
(i, artist) {
|
||||
if (i == artists.length - 1 &&
|
||||
searchArtist.hasNextPage) {
|
||||
return Waypoint(
|
||||
onEnter: () {
|
||||
searchArtist
|
||||
.fetchNextPage();
|
||||
},
|
||||
child:
|
||||
const ShimmerPlaybuttonCard(
|
||||
count: 1),
|
||||
);
|
||||
}
|
||||
return Container(
|
||||
margin: const EdgeInsets
|
||||
.symmetric(
|
||||
horizontal: 15),
|
||||
child: ArtistCard(artist),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
if (albums.isNotEmpty)
|
||||
PlatformText(
|
||||
"Albums",
|
||||
style:
|
||||
Theme.of(context).textTheme.headline5,
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
if (searchAlbum.isLoading &&
|
||||
!searchAlbum.isFetchingNextPage)
|
||||
const PlatformCircularProgressIndicator()
|
||||
else if (searchAlbum.hasError)
|
||||
PlatformText(searchAlbum
|
||||
.error?[searchAlbum.pageParams.last])
|
||||
else
|
||||
ScrollConfiguration(
|
||||
behavior: ScrollConfiguration.of(context)
|
||||
.copyWith(
|
||||
dragDevices: {
|
||||
PointerDeviceKind.touch,
|
||||
PointerDeviceKind.mouse,
|
||||
},
|
||||
),
|
||||
child: Scrollbar(
|
||||
controller: albumController,
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
controller: albumController,
|
||||
child: Row(
|
||||
children: [
|
||||
...albums.mapIndexed((i, album) {
|
||||
if (i == albums.length - 1 &&
|
||||
searchAlbum.hasNextPage) {
|
||||
return Waypoint(
|
||||
onEnter: () {
|
||||
searchAlbum.fetchNextPage();
|
||||
},
|
||||
child:
|
||||
const ShimmerPlaybuttonCard(
|
||||
count: 1),
|
||||
);
|
||||
}
|
||||
return AlbumCard(
|
||||
TypeConversionUtils
|
||||
.simpleAlbum_X_Album(
|
||||
album,
|
||||
),
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -114,11 +114,7 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
||||
? PageWindowTitleBar(
|
||||
backgroundColor: color?.color,
|
||||
foregroundColor: color?.titleTextColor,
|
||||
leading: Row(
|
||||
children: [
|
||||
PlatformBackButton(color: color?.titleTextColor)
|
||||
],
|
||||
),
|
||||
leading: PlatformBackButton(color: color?.titleTextColor),
|
||||
)
|
||||
: null,
|
||||
body: CustomScrollView(
|
||||
@ -130,6 +126,9 @@ class TrackCollectionView<T> extends HookConsumerWidget {
|
||||
pinned: true,
|
||||
expandedHeight: 400,
|
||||
automaticallyImplyLeading: kIsMobile,
|
||||
leading: kIsMobile
|
||||
? PlatformBackButton(color: color?.titleTextColor)
|
||||
: null,
|
||||
iconTheme: IconThemeData(color: color?.titleTextColor),
|
||||
primary: true,
|
||||
backgroundColor: color?.color,
|
||||
|
@ -235,13 +235,15 @@ class SpotubeState extends ConsumerState<Spotube> with WidgetsBindingObserver {
|
||||
macosTheme: macosTheme,
|
||||
macosDarkTheme: macosDarkTheme,
|
||||
themeMode: themeMode,
|
||||
windowButtonConfig: PlatformWindowButtonConfig(
|
||||
isMaximized: () => appWindow.isMaximized,
|
||||
onClose: appWindow.close,
|
||||
onRestore: appWindow.restore,
|
||||
onMaximize: appWindow.maximize,
|
||||
onMinimize: appWindow.minimize,
|
||||
),
|
||||
windowButtonConfig: kIsDesktop
|
||||
? PlatformWindowButtonConfig(
|
||||
isMaximized: () => appWindow.isMaximized,
|
||||
onClose: appWindow.close,
|
||||
onRestore: appWindow.restore,
|
||||
onMaximize: appWindow.maximize,
|
||||
onMinimize: appWindow.minimize,
|
||||
)
|
||||
: null,
|
||||
shortcuts: PlatformProperty.all({
|
||||
...WidgetsApp.defaultShortcuts.map((key, value) {
|
||||
return MapEntry(
|
||||
|
Loading…
Reference in New Issue
Block a user