chore: use shadcn in all places that's using material

This commit is contained in:
Kingkor Roy Tirtho 2025-01-30 21:44:07 +06:00
parent e0760e6250
commit 6cf4ca9179
36 changed files with 70 additions and 91 deletions

View File

@ -39,9 +39,9 @@ abstract class Env {
static final String _releaseChannel = _Env._releaseChannel;
@EnviedField(varName: "DISABLE_SPOTIFY_IMAGES", defaultValue: "0")
static final int _disableSpotifyImages = _Env._disableSpotifyImages;
static final String _disableSpotifyImages = _Env._disableSpotifyImages;
static bool get disableSpotifyImages => _disableSpotifyImages == 1;
static bool get disableSpotifyImages => _disableSpotifyImages == "1";
static ReleaseChannel get releaseChannel => _releaseChannel == "stable"
? ReleaseChannel.stable

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
const gradients = [
LinearGradient(colors: [

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:spotube/pages/home/home.dart';

View File

@ -1,5 +1,5 @@
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:simple_icons/simple_icons.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
class AnimateGradient extends HookWidget {

View File

@ -1,6 +1,6 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
/// A temporary workaround for [WillPopScope] and [PopScope] not working in GoRouter
/// https://github.com/flutter/flutter/issues/140869#issuecomment-2247181468

View File

@ -1,5 +1,5 @@
import 'package:draggable_scrollbar/draggable_scrollbar.dart';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:spotube/utils/platform.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/components/links/anchor_button.dart';
import 'package:spotube/extensions/context.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/components/links/anchor_button.dart';
import 'package:url_launcher/url_launcher_string.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/components/links/anchor_button.dart';
import 'package:spotube/utils/service_utils.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:gap/gap.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:go_router/go_router.dart';
class SpotubePage<T> extends MaterialPage<T> {

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
extension ColorAlterer on Color {
Color darken(double amount) {

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
extension AppLocale on BuildContext {

View File

@ -1,34 +0,0 @@
import 'package:flutter/material.dart';
class ShimmerColorTheme extends ThemeExtension<ShimmerColorTheme> {
final Color? shimmerColor;
final Color? shimmerBackgroundColor;
ShimmerColorTheme({
this.shimmerBackgroundColor,
this.shimmerColor,
});
@override
ThemeExtension<ShimmerColorTheme> copyWith(
{Color? shimmerColor, Color? shimmerBackgroundColor}) {
return ShimmerColorTheme(
shimmerBackgroundColor:
shimmerBackgroundColor ?? this.shimmerBackgroundColor,
shimmerColor: shimmerColor ?? this.shimmerColor,
);
}
@override
ThemeExtension<ShimmerColorTheme> lerp(
ThemeExtension<ShimmerColorTheme>? other, double t) {
if (other is! ShimmerColorTheme) {
return this;
}
return ShimmerColorTheme(
shimmerBackgroundColor:
Color.lerp(shimmerBackgroundColor, other.shimmerBackgroundColor, t),
shimmerColor: Color.lerp(shimmerColor, other.shimmerColor, t),
);
}
}

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:spotube/utils/platform.dart';
import 'package:window_manager/window_manager.dart';

View File

@ -1,5 +1,5 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:spotube/utils/platform.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:scroll_to_index/scroll_to_index.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:package_info_plus/package_info_plus.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:spotube/extensions/constrains.dart';

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
T useBrightnessValue<T>(

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
@ -9,7 +9,7 @@ VoidCallback useCustomStatusBarColor(
bool? automaticSystemUiAdjustment,
}) {
final context = useContext();
final backgroundColor = Theme.of(context).scaffoldBackgroundColor;
final backgroundColor = Theme.of(context).colorScheme.background;
// ignore: invalid_use_of_visible_for_testing_member
final previousState = SystemChrome.latestStyle;

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:palette_generator/palette_generator.dart';
@ -6,7 +7,7 @@ import 'package:spotube/components/image/universal_image.dart';
final _paletteColorState = StateProvider<PaletteColor>(
(ref) {
return PaletteColor(Colors.grey[300]!, 0);
return PaletteColor(Colors.gray[300], 0);
},
);

View File

@ -16,7 +16,7 @@
library l10n;
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
class L10n {
static final all = [

View File

@ -2,7 +2,7 @@
import 'package:drift/internal/versioned_schema.dart' as i0;
import 'package:drift/drift.dart' as i1;
import 'package:drift/drift.dart'; // ignore_for_file: type=lint,unused_import
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/models/database/database.dart';
import 'package:spotube/services/sourced_track/enums.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart';
@ -53,14 +53,14 @@ class PlayerTrackDetails extends HookConsumerWidget {
"/track/${playback.activeTrack?.id}",
push: true,
overflow: TextOverflow.ellipsis,
style: theme.textTheme.bodyMedium!.copyWith(
style: theme.typography.normal.copyWith(
color: color,
),
),
Text(
playback.activeTrack?.artists?.asString() ?? "",
overflow: TextOverflow.ellipsis,
style: theme.textTheme.bodySmall!.copyWith(color: color),
style: theme.typography.small.copyWith(color: color),
)
],
),

View File

@ -1,5 +1,5 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/spotube_icons.dart';
@ -16,7 +16,7 @@ class ArtistPageFooter extends ConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final ThemeData(:textTheme) = Theme.of(context);
final ThemeData(:typography) = Theme.of(context);
final mediaQuery = MediaQuery.of(context);
final artistImage = artist.images.asUrlString(
@ -50,7 +50,7 @@ class ArtistPageFooter extends ConsumerWidget {
alignment: Alignment.center,
child: RichText(
text: TextSpan(
style: textTheme.bodyLarge?.copyWith(
style: typography.semiBold.copyWith(
color: Colors.white,
),
children: [
@ -64,7 +64,7 @@ class ArtistPageFooter extends ConsumerWidget {
),
TextSpan(
text: " Wikipedia",
style: textTheme.titleLarge?.copyWith(
style: typography.large.copyWith(
color: Colors.white,
),
),
@ -74,10 +74,10 @@ class ArtistPageFooter extends ConsumerWidget {
),
TextSpan(
text: '\n...read more at wikipedia',
style: textTheme.bodyLarge?.copyWith(
color: Colors.lightBlue[300],
style: typography.semiBold.copyWith(
color: Colors.sky[300],
decoration: TextDecoration.underline,
decorationColor: Colors.lightBlue[300],
decorationColor: Colors.sky[300],
),
recognizer: TapGestureRecognizer()
..onTap = () async {

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/modules/artist/artist_card.dart';
import 'package:spotube/provider/spotify/spotify.dart';

View File

@ -1,7 +1,7 @@
import 'dart:io';
import 'package:desktop_webview_window/desktop_webview_window.dart';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart' hide join;
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart';
@ -28,7 +28,8 @@ Future<void> Function() useLoginCallback(WidgetRef ref) {
final exp = RegExp(r"https:\/\/accounts.spotify.com\/.+\/status");
final applicationSupportDir = await getApplicationSupportDirectory();
final userDataFolder = Directory(
join(applicationSupportDir.path, "webview_window_Webview2"));
join(applicationSupportDir.path, "webview_window_Webview2"),
);
if (!await userDataFolder.exists()) {
await userDataFolder.create();

View File

@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/components/button/back_button.dart';
import 'package:spotube/components/titlebar/titlebar.dart';
import 'package:spotube/provider/authentication/authentication.dart';
@ -17,19 +18,21 @@ class WebViewLogin extends HookConsumerWidget {
if (kIsDesktop) {
const Scaffold(
body: Center(
child: Center(
child: Text('This feature is not available on desktop'),
),
);
}
return Scaffold(
appBar: const TitleBar(
headers: const [
TitleBar(
leading: [BackButton(color: Colors.white)],
backgroundColor: Colors.transparent,
),
extendBodyBehindAppBar: true,
body: InAppWebView(
],
floatingHeader: true,
child: InAppWebView(
initialSettings: InAppWebViewSettings(
userAgent:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 safari/537.36",

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/extensions/context.dart';
import 'package:url_launcher/url_launcher_string.dart';
@ -19,7 +19,7 @@ class NoWebviewRuntimeDialog extends StatelessWidget {
},
child: Text(context.l10n.cancel),
),
FilledButton(
Button.primary(
onPressed: () async {
final url = switch (platform) {
TargetPlatform.windows =>
@ -30,8 +30,15 @@ class NoWebviewRuntimeDialog extends StatelessWidget {
_ => "",
};
if (url.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Unsupported platform')),
showToast(
context: context,
builder: (context, overlay) {
return const SurfaceCard(
child: Basic(
title: Text('Unsupported platform'),
),
);
},
);
}

View File

@ -11,7 +11,7 @@ import 'package:spotube/provider/database/database.dart';
import 'package:spotube/services/logger/logger.dart';
import 'package:collection/collection.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:intl/intl.dart';
import 'package:lrc/lrc.dart';
import 'package:package_info_plus/package_info_plus.dart';

View File

@ -1,5 +1,5 @@
import 'package:audio_service/audio_service.dart';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/env.dart';

View File

@ -3,7 +3,7 @@ import 'dart:io';
import 'dart:isolate';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart' hide join;
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:logger/logger.dart';
import 'package:path/path.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter/material.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/services/kv_store/kv_store.dart';
import 'package:spotube/utils/platform.dart';
import 'package:window_manager/window_manager.dart';