refactor: downloads page to shadcn

This commit is contained in:
Kingkor Roy Tirtho 2025-01-08 19:11:29 +06:00
parent 3ffcb48db9
commit e54a646073
3 changed files with 39 additions and 50 deletions

View File

@ -77,17 +77,15 @@ 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, size: mediaQuery.smAndDown
size: mediaQuery.smAndDown ? 95
? 95 : mediaQuery.mdAndDown
: mediaQuery.mdAndDown ? 100
? 100 : 142,
: 142,
),
), ),
) )
else else

View File

@ -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,

View File

@ -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, children: [
child: Row( CircularProgressIndicator(
children: [ value: taskProgress?.value ?? 0,
CircularProgressIndicator( ),
value: taskProgress?.value ?? 0, const SizedBox(width: 10),
), IconButton.ghost(
const SizedBox(width: 10), icon: const Icon(SpotubeIcons.pause),
IconButton( onPressed: () {
icon: const Icon(SpotubeIcons.pause), downloadManager.pause(track as SourcedTrack);
onPressed: () { }),
downloadManager.pause(track as SourcedTrack); const SizedBox(width: 10),
}), IconButton.ghost(
const SizedBox(width: 10), icon: const Icon(SpotubeIcons.close),
IconButton( onPressed: () {
icon: const Icon(SpotubeIcons.close), downloadManager.cancel(track as SourcedTrack);
onPressed: () { }),
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);