mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
refactor: downloads page to shadcn
This commit is contained in:
parent
3ffcb48db9
commit
e54a646073
@ -77,8 +77,7 @@ class LocalFolderItem extends HookConsumerWidget {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
if (tracks.isEmpty)
|
if (tracks.isEmpty)
|
||||||
Card(
|
Padding(
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
SpotubeIcons.folder,
|
SpotubeIcons.folder,
|
||||||
@ -88,7 +87,6 @@ class LocalFolderItem extends HookConsumerWidget {
|
|||||||
? 100
|
? 100
|
||||||
: 142,
|
: 142,
|
||||||
),
|
),
|
||||||
),
|
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
ClipRRect(
|
ClipRRect(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import 'package:auto_size_text/auto_size_text.dart';
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
|
|
||||||
import 'package:spotube/modules/library/user_downloads/download_item.dart';
|
import 'package:spotube/modules/library/user_downloads/download_item.dart';
|
||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
@ -31,15 +31,10 @@ class UserDownloads extends HookConsumerWidget {
|
|||||||
context.l10n
|
context.l10n
|
||||||
.currently_downloading(downloadManager.$downloadCount),
|
.currently_downloading(downloadManager.$downloadCount),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
).semiBold(),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
FilledButton(
|
Button.destructive(
|
||||||
style: FilledButton.styleFrom(
|
|
||||||
backgroundColor: Colors.red[50],
|
|
||||||
foregroundColor: Colors.red[400],
|
|
||||||
),
|
|
||||||
onPressed: downloadManager.$downloadCount == 0
|
onPressed: downloadManager.$downloadCount == 0
|
||||||
? null
|
? null
|
||||||
: downloadManager.cancelAll,
|
: downloadManager.cancelAll,
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
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:shadcn_flutter/shadcn_flutter.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/collections/spotube_icons.dart';
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/image/universal_image.dart';
|
import 'package:spotube/components/image/universal_image.dart';
|
||||||
import 'package:spotube/components/links/artist_link.dart';
|
import 'package:spotube/components/links/artist_link.dart';
|
||||||
|
import 'package:spotube/components/ui/button_tile.dart';
|
||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
import 'package:spotube/extensions/image.dart';
|
import 'package:spotube/extensions/image.dart';
|
||||||
import 'package:spotube/pages/track/track.dart';
|
import 'package:spotube/pages/track/track.dart';
|
||||||
@ -46,7 +47,8 @@ class DownloadItem extends HookConsumerWidget {
|
|||||||
final isQueryingSourceInfo =
|
final isQueryingSourceInfo =
|
||||||
taskStatus.value == null || track is! SourcedTrack;
|
taskStatus.value == null || track is! SourcedTrack;
|
||||||
|
|
||||||
return ListTile(
|
return ButtonTile(
|
||||||
|
style: ButtonVariance.ghost,
|
||||||
leading: Padding(
|
leading: Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 5),
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
child: ClipRRect(
|
child: ClipRRect(
|
||||||
@ -73,10 +75,7 @@ class DownloadItem extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
trailing: isQueryingSourceInfo
|
trailing: isQueryingSourceInfo
|
||||||
? Text(
|
? Text(context.l10n.querying_info).small()
|
||||||
context.l10n.querying_info,
|
|
||||||
style: Theme.of(context).textTheme.labelMedium,
|
|
||||||
)
|
|
||||||
: switch (taskStatus.value!) {
|
: switch (taskStatus.value!) {
|
||||||
DownloadStatus.downloading => HookBuilder(builder: (context) {
|
DownloadStatus.downloading => HookBuilder(builder: (context) {
|
||||||
final taskProgress = useListenable(useMemoized(
|
final taskProgress = useListenable(useMemoized(
|
||||||
@ -84,39 +83,36 @@ class DownloadItem extends HookConsumerWidget {
|
|||||||
.getProgressNotifier(track as SourcedTrack),
|
.getProgressNotifier(track as SourcedTrack),
|
||||||
[track],
|
[track],
|
||||||
));
|
));
|
||||||
return SizedBox(
|
return Row(
|
||||||
width: 140,
|
|
||||||
child: Row(
|
|
||||||
children: [
|
children: [
|
||||||
CircularProgressIndicator(
|
CircularProgressIndicator(
|
||||||
value: taskProgress?.value ?? 0,
|
value: taskProgress?.value ?? 0,
|
||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
IconButton(
|
IconButton.ghost(
|
||||||
icon: const Icon(SpotubeIcons.pause),
|
icon: const Icon(SpotubeIcons.pause),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
downloadManager.pause(track as SourcedTrack);
|
downloadManager.pause(track as SourcedTrack);
|
||||||
}),
|
}),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
IconButton(
|
IconButton.ghost(
|
||||||
icon: const Icon(SpotubeIcons.close),
|
icon: const Icon(SpotubeIcons.close),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
downloadManager.cancel(track as SourcedTrack);
|
downloadManager.cancel(track as SourcedTrack);
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
DownloadStatus.paused => Row(
|
DownloadStatus.paused => Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
IconButton(
|
IconButton.ghost(
|
||||||
icon: const Icon(SpotubeIcons.play),
|
icon: const Icon(SpotubeIcons.play),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
downloadManager.resume(track as SourcedTrack);
|
downloadManager.resume(track as SourcedTrack);
|
||||||
}),
|
}),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
IconButton(
|
IconButton.ghost(
|
||||||
icon: const Icon(SpotubeIcons.close),
|
icon: const Icon(SpotubeIcons.close),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
downloadManager.cancel(track as SourcedTrack);
|
downloadManager.cancel(track as SourcedTrack);
|
||||||
@ -132,7 +128,7 @@ class DownloadItem extends HookConsumerWidget {
|
|||||||
color: Colors.red[400],
|
color: Colors.red[400],
|
||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
IconButton(
|
IconButton.ghost(
|
||||||
icon: const Icon(SpotubeIcons.refresh),
|
icon: const Icon(SpotubeIcons.refresh),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
downloadManager.retry(track as SourcedTrack);
|
downloadManager.retry(track as SourcedTrack);
|
||||||
@ -143,7 +139,7 @@ class DownloadItem extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
DownloadStatus.completed =>
|
DownloadStatus.completed =>
|
||||||
Icon(SpotubeIcons.done, color: Colors.green[400]),
|
Icon(SpotubeIcons.done, color: Colors.green[400]),
|
||||||
DownloadStatus.queued => IconButton(
|
DownloadStatus.queued => IconButton.ghost(
|
||||||
icon: const Icon(SpotubeIcons.close),
|
icon: const Icon(SpotubeIcons.close),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
downloadManager.removeFromQueue(track as SourcedTrack);
|
downloadManager.removeFromQueue(track as SourcedTrack);
|
||||||
|
Loading…
Reference in New Issue
Block a user