This commit is contained in:
2026-07-27 16:42:04 +02:00
parent 45a7704ea6
commit 018b751723
23 changed files with 2327 additions and 635 deletions

View File

@@ -194,8 +194,13 @@ export const AppProvider: React.FC<{ children: React.ReactNode }> = ({ children
setBillingSummary(null);
setPlants([]);
setLanguage(getDeviceLanguage());
setAppearanceModeState('system');
setColorPaletteState('forest');
// Theme ist eine GERAETE-Einstellung, keine Kontodaten. Beim Ausloggen oder
// beim Start ohne Session darf sie deshalb nicht auf die Defaults fallen -
// sonst landet ein Gast nach jedem Neustart wieder auf Dark/Forest.
const deviceAppearance = AppMetaDb.get('appearance_mode');
setAppearanceModeState(deviceAppearance && isAppearanceMode(deviceAppearance) ? deviceAppearance : 'system');
const devicePalette = AppMetaDb.get('color_palette');
setColorPaletteState(devicePalette && isColorPalette(devicePalette) ? devicePalette : 'forest');
setProfileNameState('');
setProfileImageUri(null);
setIsLoadingPlants(false);
@@ -385,6 +390,18 @@ export const AppProvider: React.FC<{ children: React.ReactNode }> = ({ children
setHasCompletedOnboarding(true);
}
// Theme sofort aus dem Geraetespeicher setzen - vor Session-Restore und
// vor dem Server-Roundtrip. Danach ueberschreibt hydrateSession ggf. mit
// den nutzerspezifischen Werten, die aber identisch sein sollten.
const storedAppearance = AppMetaDb.get('appearance_mode');
if (storedAppearance && isAppearanceMode(storedAppearance)) {
setAppearanceModeState(storedAppearance);
}
const storedPalette = AppMetaDb.get('color_palette');
if (storedPalette && isColorPalette(storedPalette)) {
setColorPaletteState(storedPalette);
}
const s = await AuthService.getSession();
if (!s) {
resetStateForSignedOutUser();
@@ -516,11 +533,17 @@ export const AppProvider: React.FC<{ children: React.ReactNode }> = ({ children
const setAppearanceMode = useCallback((mode: AppearanceMode) => {
setAppearanceModeState(mode);
// Geraeteweit speichern, unabhaengig von einer Session: sonst geht die
// Auswahl fuer Gaeste beim Neustart verloren, und eingeloggte Nutzer sehen
// beim Start kurz das Default-Theme, weil die Nutzer-Settings erst nach
// hydrateSession (inkl. Server-Roundtrip) geladen werden.
AppMetaDb.set('appearance_mode', mode);
if (session) SettingsDb.setAppearanceMode(session.userId, mode);
}, [session]);
const setColorPalette = useCallback((palette: ColorPalette) => {
setColorPaletteState(palette);
AppMetaDb.set('color_palette', palette);
if (session) SettingsDb.setColorPalette(session.userId, palette);
}, [session]);