Revert "refactor: migrate deprecated warnings"

chore: undo flutter 3.22.x related deprecated theme migrations
This commit is contained in:
Kingkor Roy Tirtho 2024-06-06 08:19:07 +06:00
parent 26ee84d990
commit 57cd8607dd
27 changed files with 96 additions and 74 deletions

View File

@ -35,10 +35,6 @@ class ArtistCard extends HookConsumerWidget {
final radius = BorderRadius.circular(15);
final bgColor = useBrightnessValue(
theme.colorScheme.surface,
theme.colorScheme.surfaceContainerHigh,
);
final double size = useBreakpointValue<double>(
xs: 130,
sm: 130,
@ -50,8 +46,12 @@ class ArtistCard extends HookConsumerWidget {
width: size,
margin: const EdgeInsets.symmetric(vertical: 5),
child: Material(
shadowColor: theme.colorScheme.surface,
color: bgColor,
shadowColor: theme.colorScheme.background,
color: Color.lerp(
theme.colorScheme.surfaceVariant,
theme.colorScheme.surface,
useBrightnessValue(.9, .7),
),
elevation: 3,
shape: RoundedRectangleBorder(
borderRadius: radius,

View File

@ -30,7 +30,7 @@ class FriendItem extends HookConsumerWidget {
return Container(
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: colorScheme.surfaceContainer,
color: colorScheme.surfaceVariant.withOpacity(0.3),
borderRadius: BorderRadius.circular(15),
),
constraints: const BoxConstraints(

View File

@ -134,7 +134,7 @@ class HomeGenresSection extends HookConsumerWidget {
child: Ink(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
color: colorScheme.surfaceContainerHighest,
color: colorScheme.surfaceVariant,
gradient: categoriesQuery.isLoading ? null : gradient,
),
padding: const EdgeInsets.symmetric(horizontal: 16),

View File

@ -71,7 +71,7 @@ class LocalFolderItem extends HookConsumerWidget {
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Color.lerp(
colorScheme.surfaceContainerHighest,
colorScheme.surfaceVariant,
colorScheme.surface,
lerpValue,
),

View File

@ -71,7 +71,7 @@ class MultiSelectField<T> extends HookWidget {
: theme.colorScheme.onSurface.withOpacity(0.1),
),
),
mouseCursor: WidgetStateMouseCursor.textable,
mouseCursor: MaterialStateMouseCursor.textable,
onPressed: !enabled
? null
: () async {

View File

@ -122,8 +122,7 @@ class PlayerQueue extends HookConsumerWidget {
top: 5.0,
),
decoration: BoxDecoration(
color:
theme.colorScheme.surfaceContainerHighest.withOpacity(0.5),
color: theme.colorScheme.surfaceVariant.withOpacity(0.5),
borderRadius: borderRadius,
),
child: CallbackShortcuts(

View File

@ -208,8 +208,7 @@ class SiblingTracksSheet extends HookConsumerWidget {
: mediaQuery.size.height * .6,
decoration: BoxDecoration(
borderRadius: borderRadius,
color:
theme.colorScheme.surfaceContainerHighest.withOpacity(.5),
color: theme.colorScheme.surfaceVariant.withOpacity(.5),
),
child: Scaffold(
backgroundColor: Colors.transparent,

View File

@ -14,6 +14,7 @@ import 'package:spotube/components/player/volume_slider.dart';
import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/image.dart';
import 'package:spotube/hooks/utils/use_brightness_value.dart';
import 'package:spotube/models/logger.dart';
import 'package:flutter/material.dart';
import 'package:spotube/provider/authentication_provider.dart';
@ -48,6 +49,12 @@ class BottomPlayer extends HookConsumerWidget {
);
final theme = Theme.of(context);
final bg = theme.colorScheme.surfaceVariant;
final bgColor = useBrightnessValue(
Color.lerp(bg, Colors.white, 0.7),
Color.lerp(bg, Colors.black, 0.45)!,
);
// returning an empty non spacious Container as the overlay will take
// place in the global overlay stack aka [_entries]
@ -60,9 +67,7 @@ class BottomPlayer extends HookConsumerWidget {
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15),
child: DecoratedBox(
decoration: BoxDecoration(
color: theme.colorScheme.surfaceContainer.withOpacity(.8),
),
decoration: BoxDecoration(color: bgColor?.withOpacity(0.8)),
child: Material(
type: MaterialType.transparency,
textStyle: theme.textTheme.bodyMedium!,

View File

@ -14,6 +14,7 @@ import 'package:spotube/components/shared/image/universal_image.dart';
import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/image.dart';
import 'package:spotube/hooks/utils/use_brightness_value.dart';
import 'package:spotube/hooks/controllers/use_sidebarx_controller.dart';
import 'package:spotube/pages/profile/profile.dart';
import 'package:spotube/pages/settings/settings.dart';
@ -69,7 +70,12 @@ class Sidebar extends HookConsumerWidget {
);
final theme = Theme.of(context);
final bg = theme.colorScheme.surfaceContainer;
final bg = theme.colorScheme.surfaceVariant;
final bgColor = useBrightnessValue(
Color.lerp(bg, Colors.white, 0.7),
Color.lerp(bg, Colors.black, 0.45)!,
);
useEffect(() {
if (!context.mounted) return;
@ -153,7 +159,7 @@ class Sidebar extends HookConsumerWidget {
),
padding: const EdgeInsets.symmetric(horizontal: 6),
decoration: BoxDecoration(
color: bg,
color: bgColor?.withOpacity(0.8),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),

View File

@ -68,7 +68,7 @@ class SpotubeNavigationBar extends HookConsumerWidget {
backgroundColor:
theme.colorScheme.secondaryContainer.withOpacity(0.72),
buttonBackgroundColor: buttonColor,
color: theme.colorScheme.surface,
color: theme.colorScheme.background,
height: panelHeight,
animationDuration: const Duration(milliseconds: 350),
items: navbarTileList.map(

View File

@ -179,9 +179,9 @@ class ColorTile extends StatelessWidget {
colorScheme.primaryContainer,
colorScheme.secondary,
colorScheme.secondaryContainer,
colorScheme.background,
colorScheme.surface,
colorScheme.surface,
colorScheme.surfaceContainerHighest,
colorScheme.surfaceVariant,
colorScheme.onPrimary,
colorScheme.onSurface,
];

View File

@ -187,7 +187,7 @@ class AdaptivePopSheetList<T> extends StatelessWidget {
icon: icon ?? const Icon(SpotubeIcons.moreVertical),
tooltip: tooltip,
style: theme.iconButtonTheme.style?.copyWith(
shape: WidgetStatePropertyAll(
shape: MaterialStatePropertyAll(
RoundedRectangleBorder(
borderRadius: borderRadius,
),

View File

@ -29,7 +29,7 @@ class AnchorButton<T> extends HookWidget {
onTapUp: (event) => tap.value = false,
onTap: onTap,
child: MouseRegion(
cursor: WidgetStateMouseCursor.clickable,
cursor: MaterialStateMouseCursor.clickable,
child: Text(
text,
style: style.copyWith(

View File

@ -210,16 +210,16 @@ class WindowTitleBarButtons extends HookConsumerWidget {
final theme = Theme.of(context);
final colors = WindowButtonColors(
normal: Colors.transparent,
iconNormal: foregroundColor ?? theme.colorScheme.onSurface,
mouseOver: theme.colorScheme.onSurface.withOpacity(0.1),
mouseDown: theme.colorScheme.onSurface.withOpacity(0.2),
iconMouseOver: theme.colorScheme.onSurface,
iconMouseDown: theme.colorScheme.onSurface,
iconNormal: foregroundColor ?? theme.colorScheme.onBackground,
mouseOver: theme.colorScheme.onBackground.withOpacity(0.1),
mouseDown: theme.colorScheme.onBackground.withOpacity(0.2),
iconMouseOver: theme.colorScheme.onBackground,
iconMouseDown: theme.colorScheme.onBackground,
);
final closeColors = WindowButtonColors(
normal: Colors.transparent,
iconNormal: foregroundColor ?? theme.colorScheme.onSurface,
iconNormal: foregroundColor ?? theme.colorScheme.onBackground,
mouseOver: Colors.red,
mouseDown: Colors.red[800]!,
iconMouseOver: Colors.white,

View File

@ -53,10 +53,6 @@ class PlaybuttonCard extends HookWidget {
final mediaQuery = MediaQuery.of(context);
final radius = BorderRadius.circular(15);
final bgColor = useBrightnessValue(
theme.colorScheme.surface,
theme.colorScheme.surfaceContainerHigh,
);
final double size = useBreakpointValue<double>(
xs: 130,
sm: 130,
@ -76,9 +72,13 @@ class PlaybuttonCard extends HookWidget {
constraints: BoxConstraints(maxWidth: size),
margin: margin,
child: Material(
color: bgColor,
color: Color.lerp(
theme.colorScheme.surfaceVariant,
theme.colorScheme.surface,
useBrightnessValue(.9, .7),
),
borderRadius: radius,
shadowColor: theme.colorScheme.surface,
shadowColor: theme.colorScheme.background,
elevation: 3,
child: InkWell(
mouseCursor: SystemMouseCursors.click,
@ -158,7 +158,7 @@ class PlaybuttonCard extends HookWidget {
Skeleton.keep(
child: IconButton(
style: IconButton.styleFrom(
backgroundColor: theme.colorScheme.surface,
backgroundColor: theme.colorScheme.background,
foregroundColor: theme.colorScheme.primary,
minimumSize: const Size.square(10),
),

View File

@ -34,7 +34,7 @@ class ThemedButtonsTabBar extends HookWidget implements PreferredSizeWidget {
),
borderWidth: 0,
unselectedDecoration: BoxDecoration(
color: theme.colorScheme.surface,
color: theme.colorScheme.background,
borderRadius: BorderRadius.circular(15),
),
unselectedLabelStyle: theme.textTheme.labelLarge?.copyWith(

View File

@ -33,7 +33,7 @@ class StatsAlbumItem extends StatelessWidget {
Text("${album.albumType?.formatted}"),
Flexible(
child: ArtistLink(
artists: album.artists ?? [],
artists: album.artists!,
mainAxisAlignment: WrapAlignment.start,
),
),

View File

@ -10,6 +10,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:local_notifier/local_notifier.dart';
import 'package:media_kit/media_kit.dart';
import 'package:metadata_god/metadata_god.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:spotube/collections/initializers.dart';
import 'package:spotube/collections/routes.dart';
import 'package:spotube/collections/intents.dart';
@ -138,11 +139,28 @@ Future<void> main(List<String> rawArgs) async {
);
}
class Spotube extends HookConsumerWidget {
class Spotube extends StatefulHookConsumerWidget {
const Spotube({super.key});
@override
Widget build(BuildContext context, ref) {
SpotubeState createState() => SpotubeState();
static SpotubeState of(BuildContext context) =>
context.findAncestorStateOfType<SpotubeState>()!;
}
class SpotubeState extends ConsumerState<Spotube> {
final logger = getLogger(Spotube);
SharedPreferences? localStorage;
@override
void initState() {
super.initState();
SharedPreferences.getInstance().then(((value) => localStorage = value));
}
@override
Widget build(BuildContext context) {
final themeMode =
ref.watch(userPreferencesProvider.select((s) => s.themeMode));
final accentMaterialColor =
@ -177,7 +195,6 @@ class Spotube extends HookConsumerWidget {
() => theme(paletteColor ?? accentMaterialColor, Brightness.light, false),
[paletteColor, accentMaterialColor],
);
final darkTheme = useMemoized(
() => theme(
paletteColor ?? accentMaterialColor,

View File

@ -17,7 +17,7 @@ class DesktopLoginPage extends HookConsumerWidget {
Widget build(BuildContext context, ref) {
final mediaQuery = MediaQuery.of(context);
final theme = Theme.of(context);
final color = theme.colorScheme.surfaceContainerHighest.withOpacity(.3);
final color = theme.colorScheme.surfaceVariant.withOpacity(.3);
return SafeArea(
child: Scaffold(

View File

@ -100,7 +100,7 @@ class LyricsPage extends HookConsumerWidget {
child: Container(
clipBehavior: Clip.hardEdge,
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surface.withOpacity(.4),
color: Theme.of(context).colorScheme.background.withOpacity(.4),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),

View File

@ -107,7 +107,8 @@ class MiniLyricsPage extends HookConsumerWidget {
: const Icon(SpotubeIcons.lyricsOff),
style: ButtonStyle(
foregroundColor: showLyrics.value
? WidgetStateProperty.all(theme.colorScheme.primary)
? MaterialStateProperty.all(
theme.colorScheme.primary)
: null,
),
onPressed: () async {
@ -131,7 +132,8 @@ class MiniLyricsPage extends HookConsumerWidget {
: const Icon(SpotubeIcons.hoverOff),
style: ButtonStyle(
foregroundColor: hoverMode.value
? WidgetStateProperty.all(theme.colorScheme.primary)
? MaterialStateProperty.all(
theme.colorScheme.primary)
: null,
),
onPressed: () async {
@ -152,7 +154,7 @@ class MiniLyricsPage extends HookConsumerWidget {
),
style: ButtonStyle(
foregroundColor: snapshot.data == true
? WidgetStateProperty.all(
? MaterialStateProperty.all(
theme.colorScheme.primary)
: null,
),
@ -184,12 +186,12 @@ class MiniLyricsPage extends HookConsumerWidget {
child: TabBarView(
children: [
SyncedLyrics(
palette: PaletteColor(theme.colorScheme.surface, 0),
palette: PaletteColor(theme.colorScheme.background, 0),
isModal: true,
defaultTextZoom: 65,
),
PlainLyrics(
palette: PaletteColor(theme.colorScheme.surface, 0),
palette: PaletteColor(theme.colorScheme.background, 0),
isModal: true,
defaultTextZoom: 65,
),

View File

@ -212,7 +212,7 @@ class SearchPage extends HookConsumerWidget {
Icon(
SpotubeIcons.web,
size: 120,
color: theme.colorScheme.onSurface
color: theme.colorScheme.onBackground
.withOpacity(0.7),
),
const SizedBox(height: 20),
@ -220,7 +220,7 @@ class SearchPage extends HookConsumerWidget {
context.l10n.search_to_get_results,
style: theme.textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.w900,
color: theme.colorScheme.onSurface
color: theme.colorScheme.onBackground
.withOpacity(0.5),
),
),
@ -246,7 +246,7 @@ class SearchPage extends HookConsumerWidget {
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w900,
color: theme.colorScheme.onSurface
color: theme.colorScheme.onBackground
.withOpacity(0.7),
),
),

View File

@ -20,6 +20,7 @@ class BlackListPage extends HookConsumerWidget {
final controller = useScrollController();
final blacklist = ref.watch(blacklistProvider);
final searchText = useState("");
final filteredBlacklist = useMemoized(
() {
if (searchText.value.isEmpty) {

View File

@ -43,9 +43,10 @@ class SettingsAboutSection extends HookConsumerWidget {
),
trailing: (context, update) => FilledButton(
style: ButtonStyle(
backgroundColor: WidgetStatePropertyAll(Colors.red[100]),
foregroundColor: const WidgetStatePropertyAll(Colors.pinkAccent),
padding: const WidgetStatePropertyAll(EdgeInsets.all(15)),
backgroundColor: MaterialStatePropertyAll(Colors.red[100]),
foregroundColor:
const MaterialStatePropertyAll(Colors.pinkAccent),
padding: const MaterialStatePropertyAll(EdgeInsets.all(15)),
),
onPressed: () {
launchUrlString(

View File

@ -82,7 +82,7 @@ class SettingsAccountSection extends HookConsumerWidget {
router.push("/login");
},
style: ButtonStyle(
shape: WidgetStateProperty.all(
shape: MaterialStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(25.0),
),

View File

@ -3,6 +3,7 @@ import 'package:file_selector/file_selector.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/settings/section_card_with_heading.dart';
import 'package:spotube/extensions/context.dart';

View File

@ -4,22 +4,13 @@ ThemeData theme(Color seed, Brightness brightness, bool isAmoled) {
final scheme = ColorScheme.fromSeed(
seedColor: seed,
shadow: Colors.black12,
background: isAmoled ? Colors.black : null,
surface: isAmoled ? Colors.black : null,
surfaceContainer: isAmoled ? const Color(0xFF090909) : null,
surfaceContainerHigh: isAmoled ? const Color(0xFF181818) : null,
surfaceContainerHighest: isAmoled ? const Color(0xFF282828) : null,
brightness: brightness,
);
return ThemeData(
useMaterial3: true,
colorScheme: scheme,
scaffoldBackgroundColor: isAmoled ? Colors.black : null,
cardTheme: CardTheme(
color: scheme.surfaceContainer,
shadowColor: scheme.shadow,
elevation: 2,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)),
),
listTileTheme: ListTileThemeData(
horizontalTitleGap: 5,
iconColor: scheme.onSurface,
@ -39,7 +30,7 @@ ThemeData theme(Color seed, Brightness brightness, bool isAmoled) {
navigationBarTheme: const NavigationBarThemeData(
labelBehavior: NavigationDestinationLabelBehavior.alwaysHide,
height: 50,
iconTheme: WidgetStatePropertyAll(
iconTheme: MaterialStatePropertyAll(
IconThemeData(size: 18),
),
),
@ -66,25 +57,25 @@ ThemeData theme(Color seed, Brightness brightness, bool isAmoled) {
),
sliderTheme: SliderThemeData(overlayShape: SliderComponentShape.noOverlay),
searchBarTheme: SearchBarThemeData(
textStyle: const WidgetStatePropertyAll(TextStyle(fontSize: 15)),
textStyle: const MaterialStatePropertyAll(TextStyle(fontSize: 15)),
constraints: const BoxConstraints(maxWidth: double.infinity),
padding: const WidgetStatePropertyAll(EdgeInsets.all(8)),
backgroundColor: WidgetStatePropertyAll(
padding: const MaterialStatePropertyAll(EdgeInsets.all(8)),
backgroundColor: MaterialStatePropertyAll(
Color.lerp(
scheme.surfaceContainerHighest,
scheme.surfaceVariant,
scheme.surface,
brightness == Brightness.light ? .9 : .7,
),
),
elevation: const WidgetStatePropertyAll(0),
shape: WidgetStatePropertyAll(
elevation: const MaterialStatePropertyAll(0),
shape: MaterialStatePropertyAll(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
),
),
scrollbarTheme: const ScrollbarThemeData(
thickness: WidgetStatePropertyAll(14),
thickness: MaterialStatePropertyAll(14),
),
checkboxTheme: CheckboxThemeData(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),