cleanup providers

This commit is contained in:
shenlong-tanwen
2026-05-03 22:11:30 +07:00
parent 296b696be9
commit e7d225dcc5
3 changed files with 11 additions and 35 deletions
+2 -1
View File
@@ -24,6 +24,7 @@ import 'package:immich_mobile/platform/background_worker_lock_api.g.dart';
import 'package:immich_mobile/providers/app_life_cycle.provider.dart'; import 'package:immich_mobile/providers/app_life_cycle.provider.dart';
import 'package:immich_mobile/providers/asset_viewer/share_intent_upload.provider.dart'; import 'package:immich_mobile/providers/asset_viewer/share_intent_upload.provider.dart';
import 'package:immich_mobile/providers/infrastructure/db.provider.dart'; import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
import 'package:immich_mobile/providers/infrastructure/metadata.provider.dart';
import 'package:immich_mobile/providers/infrastructure/platform.provider.dart'; import 'package:immich_mobile/providers/infrastructure/platform.provider.dart';
import 'package:immich_mobile/providers/locale_provider.dart'; import 'package:immich_mobile/providers/locale_provider.dart';
import 'package:immich_mobile/providers/routes.provider.dart'; import 'package:immich_mobile/providers/routes.provider.dart';
@@ -241,7 +242,7 @@ class ImmichAppState extends ConsumerState<ImmichApp> with WidgetsBindingObserve
localizationsDelegates: context.localizationDelegates, localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales, supportedLocales: context.supportedLocales,
locale: context.locale, locale: context.locale,
themeMode: ref.watch(immichThemeModeProvider), themeMode: ref.watch(appConfigProvider.select((config) => config.theme.mode)),
darkTheme: getThemeData(colorScheme: immichTheme.dark, locale: context.locale), darkTheme: getThemeData(colorScheme: immichTheme.dark, locale: context.locale),
theme: getThemeData(colorScheme: immichTheme.light, locale: context.locale), theme: getThemeData(colorScheme: immichTheme.light, locale: context.locale),
builder: (context, child) => ImmichTranslationProvider( builder: (context, child) => ImmichTranslationProvider(
+7 -22
View File
@@ -1,32 +1,17 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/constants/colors.dart';
import 'package:immich_mobile/providers/infrastructure/metadata.provider.dart'; import 'package:immich_mobile/providers/infrastructure/metadata.provider.dart';
import 'package:immich_mobile/theme/color_scheme.dart'; import 'package:immich_mobile/theme/color_scheme.dart';
import 'package:immich_mobile/theme/dynamic_theme.dart'; import 'package:immich_mobile/theme/dynamic_theme.dart';
import 'package:immich_mobile/theme/theme_data.dart'; import 'package:immich_mobile/theme/theme_data.dart';
final immichThemeModeProvider = StateProvider<ThemeMode>((ref) => ref.watch(appConfigProvider).theme.mode);
final immichThemePresetProvider = StateProvider<ImmichColorPreset>(
(ref) => ref.watch(appConfigProvider.select((config) => config.theme.primaryColor)),
);
final dynamicThemeSettingProvider = StateProvider<bool>(
(ref) => ref.watch(appConfigProvider.select((config) => config.theme.dynamicTheme)),
);
final colorfulInterfaceSettingProvider = StateProvider<bool>(
(ref) => ref.watch(appConfigProvider.select((config) => config.theme.colorfulInterface)),
);
// Provider for current selected theme // Provider for current selected theme
final immichThemeProvider = StateProvider<ImmichTheme>((ref) { final immichThemeProvider = StateProvider<ImmichTheme>((ref) {
final primaryColorPreset = ref.watch(immichThemePresetProvider); final themeConfig = ref.watch(appConfigProvider.select((config) => config.theme));
final useSystemColor = ref.watch(dynamicThemeSettingProvider);
final useColorfulInterface = ref.watch(colorfulInterfaceSettingProvider);
final ImmichTheme? dynamicTheme = DynamicTheme.theme;
final currentTheme = (useSystemColor && dynamicTheme != null) ? dynamicTheme : primaryColorPreset.themeOfPreset;
return useColorfulInterface ? currentTheme : decolorizeSurfaces(theme: currentTheme); final ImmichTheme? dynamicTheme = DynamicTheme.theme;
final currentTheme = (themeConfig.dynamicTheme && dynamicTheme != null)
? dynamicTheme
: themeConfig.primaryColor.themeOfPreset;
return themeConfig.colorfulInterface ? currentTheme : decolorizeSurfaces(theme: currentTheme);
}); });
@@ -5,7 +5,6 @@ import 'package:immich_mobile/domain/models/metadata_key.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/extensions/translate_extensions.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart';
import 'package:immich_mobile/providers/infrastructure/metadata.provider.dart'; import 'package:immich_mobile/providers/infrastructure/metadata.provider.dart';
import 'package:immich_mobile/providers/theme.provider.dart';
import 'package:immich_mobile/widgets/settings/preference_settings/primary_color_setting.dart'; import 'package:immich_mobile/widgets/settings/preference_settings/primary_color_setting.dart';
import 'package:immich_mobile/widgets/settings/setting_group_title.dart'; import 'package:immich_mobile/widgets/settings/setting_group_title.dart';
import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart'; import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
@@ -15,7 +14,7 @@ class ThemeSetting extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final currentTheme = useState(ref.read(immichThemeModeProvider)); final currentTheme = useState(ref.read(appConfigProvider.select((config) => config.theme.mode)));
final isDarkTheme = useValueNotifier(currentTheme.value == ThemeMode.dark); final isDarkTheme = useValueNotifier(currentTheme.value == ThemeMode.dark);
final isSystemTheme = useValueNotifier(currentTheme.value == ThemeMode.system); final isSystemTheme = useValueNotifier(currentTheme.value == ThemeMode.system);
final colorfulInterface = useValueNotifier( final colorfulInterface = useValueNotifier(
@@ -23,13 +22,7 @@ class ThemeSetting extends HookConsumerWidget {
); );
void onThemeChange(bool isDark) { void onThemeChange(bool isDark) {
if (isDark) { currentTheme.value = isDark ? ThemeMode.dark : ThemeMode.light;
ref.watch(immichThemeModeProvider.notifier).state = ThemeMode.dark;
currentTheme.value = ThemeMode.dark;
} else {
ref.watch(immichThemeModeProvider.notifier).state = ThemeMode.light;
currentTheme.value = ThemeMode.light;
}
ref.read(metadataProvider).write(MetadataKey.themeMode, currentTheme.value); ref.read(metadataProvider).write(MetadataKey.themeMode, currentTheme.value);
} }
@@ -37,17 +30,14 @@ class ThemeSetting extends HookConsumerWidget {
if (isSystem) { if (isSystem) {
currentTheme.value = ThemeMode.system; currentTheme.value = ThemeMode.system;
isSystemTheme.value = true; isSystemTheme.value = true;
ref.watch(immichThemeModeProvider.notifier).state = ThemeMode.system;
} else { } else {
final currentSystemBrightness = context.platformBrightness; final currentSystemBrightness = context.platformBrightness;
isSystemTheme.value = false; isSystemTheme.value = false;
isDarkTheme.value = currentSystemBrightness == Brightness.dark; isDarkTheme.value = currentSystemBrightness == Brightness.dark;
if (currentSystemBrightness == Brightness.light) { if (currentSystemBrightness == Brightness.light) {
currentTheme.value = ThemeMode.light; currentTheme.value = ThemeMode.light;
ref.watch(immichThemeModeProvider.notifier).state = ThemeMode.light;
} else if (currentSystemBrightness == Brightness.dark) { } else if (currentSystemBrightness == Brightness.dark) {
currentTheme.value = ThemeMode.dark; currentTheme.value = ThemeMode.dark;
ref.watch(immichThemeModeProvider.notifier).state = ThemeMode.dark;
} }
} }
ref.read(metadataProvider).write(MetadataKey.themeMode, currentTheme.value); ref.read(metadataProvider).write(MetadataKey.themeMode, currentTheme.value);