mirror of
https://github.com/immich-app/immich.git
synced 2024-12-29 15:11:58 +00:00
75 lines
2.4 KiB
Dart
75 lines
2.4 KiB
Dart
|
import 'package:flutter/material.dart';
|
||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||
|
|
||
|
import 'package:immich_mobile/constants/colors.dart';
|
||
|
import 'package:immich_mobile/theme/color_scheme.dart';
|
||
|
import 'package:immich_mobile/theme/theme_data.dart';
|
||
|
import 'package:immich_mobile/theme/dynamic_theme.dart';
|
||
|
import 'package:immich_mobile/providers/app_settings.provider.dart';
|
||
|
import 'package:immich_mobile/services/app_settings.service.dart';
|
||
|
|
||
|
final immichThemeModeProvider = StateProvider<ThemeMode>((ref) {
|
||
|
final themeMode = ref
|
||
|
.watch(appSettingsServiceProvider)
|
||
|
.getSetting(AppSettingsEnum.themeMode);
|
||
|
|
||
|
debugPrint("Current themeMode $themeMode");
|
||
|
|
||
|
if (themeMode == ThemeMode.light.name) {
|
||
|
return ThemeMode.light;
|
||
|
} else if (themeMode == ThemeMode.dark.name) {
|
||
|
return ThemeMode.dark;
|
||
|
} else {
|
||
|
return ThemeMode.system;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
final immichThemePresetProvider = StateProvider<ImmichColorPreset>((ref) {
|
||
|
final appSettingsProvider = ref.watch(appSettingsServiceProvider);
|
||
|
final primaryColorPreset =
|
||
|
appSettingsProvider.getSetting(AppSettingsEnum.primaryColor);
|
||
|
|
||
|
debugPrint("Current theme preset $primaryColorPreset");
|
||
|
|
||
|
try {
|
||
|
return ImmichColorPreset.values
|
||
|
.firstWhere((e) => e.name == primaryColorPreset);
|
||
|
} catch (e) {
|
||
|
debugPrint(
|
||
|
"Theme preset $primaryColorPreset not found. Applying default preset.",
|
||
|
);
|
||
|
appSettingsProvider.setSetting(
|
||
|
AppSettingsEnum.primaryColor,
|
||
|
defaultColorPresetName,
|
||
|
);
|
||
|
return defaultColorPreset;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
final dynamicThemeSettingProvider = StateProvider<bool>((ref) {
|
||
|
return ref
|
||
|
.watch(appSettingsServiceProvider)
|
||
|
.getSetting(AppSettingsEnum.dynamicTheme);
|
||
|
});
|
||
|
|
||
|
final colorfulInterfaceSettingProvider = StateProvider<bool>((ref) {
|
||
|
return ref
|
||
|
.watch(appSettingsServiceProvider)
|
||
|
.getSetting(AppSettingsEnum.colorfulInterface);
|
||
|
});
|
||
|
|
||
|
// Provider for current selected theme
|
||
|
final immichThemeProvider = StateProvider<ImmichTheme>((ref) {
|
||
|
final primaryColorPreset = ref.read(immichThemePresetProvider);
|
||
|
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);
|
||
|
});
|