mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
refactor(blacklist): blacklist page instead of dialog
This commit is contained in:
parent
947c14353e
commit
d495709c99
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:spotify/spotify.dart' hide Search;
|
import 'package:spotify/spotify.dart' hide Search;
|
||||||
|
import 'package:spotube/pages/settings/blacklist.dart';
|
||||||
import 'package:spotube/pages/settings/about.dart';
|
import 'package:spotube/pages/settings/about.dart';
|
||||||
import 'package:spotube/utils/platform.dart';
|
import 'package:spotube/utils/platform.dart';
|
||||||
import 'package:spotube/components/shared/spotube_page_route.dart';
|
import 'package:spotube/components/shared/spotube_page_route.dart';
|
||||||
@ -56,6 +57,12 @@ final router = GoRouter(
|
|||||||
child: const SettingsPage(),
|
child: const SettingsPage(),
|
||||||
),
|
),
|
||||||
routes: [
|
routes: [
|
||||||
|
GoRoute(
|
||||||
|
path: "blacklist",
|
||||||
|
pageBuilder: (context, state) => SpotubePage(
|
||||||
|
child: const BlackListPage(),
|
||||||
|
),
|
||||||
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: "about",
|
path: "about",
|
||||||
pageBuilder: (context, state) => SpotubePage(
|
pageBuilder: (context, state) => SpotubePage(
|
||||||
|
@ -7,7 +7,6 @@ import 'package:spotube/utils/platform.dart';
|
|||||||
class PageWindowTitleBar extends StatefulHookWidget with PreferredSizeWidget {
|
class PageWindowTitleBar extends StatefulHookWidget with PreferredSizeWidget {
|
||||||
final Widget? leading;
|
final Widget? leading;
|
||||||
final bool automaticallyImplyLeading;
|
final bool automaticallyImplyLeading;
|
||||||
final Widget? title;
|
|
||||||
final List<Widget>? actions;
|
final List<Widget>? actions;
|
||||||
final Color? backgroundColor;
|
final Color? backgroundColor;
|
||||||
final Color? foregroundColor;
|
final Color? foregroundColor;
|
||||||
@ -24,7 +23,6 @@ class PageWindowTitleBar extends StatefulHookWidget with PreferredSizeWidget {
|
|||||||
|
|
||||||
PageWindowTitleBar({
|
PageWindowTitleBar({
|
||||||
Key? key,
|
Key? key,
|
||||||
this.title,
|
|
||||||
this.actions,
|
this.actions,
|
||||||
this.center,
|
this.center,
|
||||||
this.toolbarOpacity = 1,
|
this.toolbarOpacity = 1,
|
||||||
|
@ -100,10 +100,10 @@ class ShimmerTrackTile extends StatelessWidget {
|
|||||||
child: CustomPaint(
|
child: CustomPaint(
|
||||||
size: const Size(double.infinity, 50),
|
size: const Size(double.infinity, 50),
|
||||||
painter: ShimmerTrackTilePainter(
|
painter: ShimmerTrackTilePainter(
|
||||||
background: shimmerTheme?.shimmerBackgroundColor ??
|
background: shimmerTheme.shimmerBackgroundColor ??
|
||||||
Theme.of(context).scaffoldBackgroundColor,
|
Theme.of(context).scaffoldBackgroundColor,
|
||||||
foreground:
|
foreground:
|
||||||
shimmerTheme?.shimmerColor ?? Theme.of(context).cardColor,
|
shimmerTheme.shimmerColor ?? Theme.of(context).cardColor,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -18,7 +18,7 @@ class AboutSpotube extends HookConsumerWidget {
|
|||||||
return PlatformScaffold(
|
return PlatformScaffold(
|
||||||
appBar: PageWindowTitleBar(
|
appBar: PageWindowTitleBar(
|
||||||
leading: const PlatformBackButton(),
|
leading: const PlatformBackButton(),
|
||||||
title: const PlatformText("About Wives"),
|
center: const PlatformText("About Spotube"),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
@ -4,11 +4,12 @@ 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/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';
|
||||||
|
|
||||||
class BlackListDialog extends HookConsumerWidget {
|
class BlackListPage extends HookConsumerWidget {
|
||||||
const BlackListDialog({Key? key}) : super(key: key);
|
const BlackListPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
@ -33,13 +34,19 @@ class BlackListDialog extends HookConsumerWidget {
|
|||||||
[blacklist, searchText.value],
|
[blacklist, searchText.value],
|
||||||
);
|
);
|
||||||
|
|
||||||
return PlatformAlertDialog(
|
return PlatformScaffold(
|
||||||
title: const PlatformText("Blacklist"),
|
appBar: PageWindowTitleBar(
|
||||||
content: Column(
|
center: const PlatformText("Blacklist"),
|
||||||
|
centerTitle: true,
|
||||||
|
leading: const PlatformBackButton(),
|
||||||
|
),
|
||||||
|
body: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: platform == TargetPlatform.windows
|
||||||
|
? const EdgeInsets.all(8.0).copyWith(left: 45)
|
||||||
|
: const EdgeInsets.all(8.0),
|
||||||
child: PlatformTextField(
|
child: PlatformTextField(
|
||||||
onChanged: (value) => searchText.value = value,
|
onChanged: (value) => searchText.value = value,
|
||||||
placeholder: "Search",
|
placeholder: "Search",
|
||||||
@ -51,12 +58,11 @@ class BlackListDialog extends HookConsumerWidget {
|
|||||||
itemCount: filteredBlacklist.length,
|
itemCount: filteredBlacklist.length,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final item = filteredBlacklist.elementAt(index);
|
final item = filteredBlacklist.elementAt(index);
|
||||||
return ListTile(
|
return PlatformListTile(
|
||||||
leading: PlatformText("${index + 1}."),
|
leading: PlatformText("${index + 1}."),
|
||||||
minLeadingWidth: 20,
|
|
||||||
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: IconButton(
|
trailing: PlatformIconButton(
|
||||||
icon: Icon(Icons.delete_forever_rounded,
|
icon: Icon(Icons.delete_forever_rounded,
|
||||||
color: Colors.red[400]),
|
color: Colors.red[400]),
|
||||||
onPressed: () {
|
onPressed: () {
|
@ -5,7 +5,6 @@ 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/components/settings/blacklist_dialog.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';
|
||||||
@ -339,19 +338,14 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
PlatformListTile(
|
PlatformListTile(
|
||||||
leading: const Icon(Icons.playlist_remove_rounded),
|
leading: const Icon(Icons.playlist_remove_rounded),
|
||||||
title: const PlatformText(
|
title: const PlatformText("Blacklist"),
|
||||||
"Track/Artist Blacklist",
|
subtitle: const PlatformText(
|
||||||
|
"Blacklisted tracks and artists",
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
showPlatformAlertDialog(
|
GoRouter.of(context).push("/settings/blacklist");
|
||||||
context,
|
|
||||||
barrierDismissible: true,
|
|
||||||
builder: (context) {
|
|
||||||
return const BlackListDialog();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
trailing: const Icon(Icons.open_in_new_rounded),
|
trailing: const Icon(Icons.chevron_right_rounded),
|
||||||
),
|
),
|
||||||
PlatformText(
|
PlatformText(
|
||||||
" Search",
|
" Search",
|
||||||
|
Loading…
Reference in New Issue
Block a user