Fix: flutter_timezone 5.x liefert TimezoneInfo-Objekt – identifier speichern statt Objekt

Der Firestore-Write warf zur Laufzeit eine Exception (nicht serialisierbares
Objekt), wodurch auch der FCM-Token nie gespeichert wurde. Fehler bei der
Push-Registrierung werden jetzt geloggt statt verschluckt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
cschlaefke 2026-07-19 15:43:02 +02:00
parent c1205fb959
commit 876ed06a97

View file

@ -49,7 +49,9 @@ class FirebasePushRegistrationService implements PushRegistrationService {
final timezone = await FlutterTimezone.getLocalTimezone();
await _firestore.collection('users').doc(uid).set({
'fcmTokens': FieldValue.arrayUnion([token]),
'timezone': timezone,
// IANA-Kennung, z. B. "Europe/Berlin" das Objekt selbst ist nicht
// Firestore-serialisierbar.
'timezone': timezone.identifier,
}, SetOptions(merge: true));
}
@ -78,6 +80,12 @@ final pushRegistrationServiceProvider = Provider<PushRegistrationService>((ref)
final pushSetupProvider = Provider<void>((ref) {
final user = ref.watch(authStateProvider).value;
if (user != null) {
ref.read(pushRegistrationServiceProvider).registerDevice(user);
ref.read(pushRegistrationServiceProvider).registerDevice(user).catchError(
(Object error, StackTrace stack) {
// Bewusst nur loggen: Push-Registrierung darf den App-Start nie
// blockieren, aber Fehler müssen im Log sichtbar sein.
debugPrint('Push-Registrierung fehlgeschlagen: $error');
},
);
}
});