From b94e8f252a117089a02deb92f855976625cf1230 Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Wed, 25 Feb 2026 10:49:49 +0100 Subject: [PATCH] Erweiterungen --- lib/content_views/main_page.dart | 28 +++++++++++++++++++ lib/main.dart | 1 + lib/popups/infos_popup.dart | 7 ++--- lib/tools/app_localizations.dart | 6 ++++ lib/tools/constants.dart | 1 + .../messages/language_changed_message.dart | 7 +++++ 6 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 lib/tools/messages/language_changed_message.dart diff --git a/lib/content_views/main_page.dart b/lib/content_views/main_page.dart index e83ecfb..e2390b5 100644 --- a/lib/content_views/main_page.dart +++ b/lib/content_views/main_page.dart @@ -55,6 +55,17 @@ class _MainPageState extends State with ConsumerMixin, ProducerMixin { _refreshBadges(); _initMessages(); + + // Listener für Sprachänderungen + AppLocalizations().languageNotifier.addListener(_onLanguageChanged); + } + + void _onLanguageChanged() { + if (mounted) { + setState(() { + // UI wird neu aufgebaut mit neuer Sprache + }); + } } @override @@ -66,6 +77,9 @@ class _MainPageState extends State with ConsumerMixin, ProducerMixin { unsubscribe(queueId: Constants.messageTopicJobDeleted); unsubscribe(queueId: Constants.messageTopicUpdateBadges); unsubscribe(queueId: Constants.messageTopicBWVEnabled); + + // Entferne Listener für Sprachänderungen + AppLocalizations().languageNotifier.removeListener(_onLanguageChanged); super.dispose(); } @@ -459,6 +473,17 @@ class _HeaderWidgetState extends State<_HeaderWidget> with ConsumerMixin { _updateHeader(); _initMessages(); + + // Listener für Sprachänderungen + AppLocalizations().languageNotifier.addListener(_onLanguageChanged); + } + + void _onLanguageChanged() { + if (mounted) { + setState(() { + // UI wird neu aufgebaut mit neuer Sprache + }); + } } @override @@ -466,6 +491,9 @@ class _HeaderWidgetState extends State<_HeaderWidget> with ConsumerMixin { // Unsubscribe from all message topics unsubscribe(queueId: Constants.messageTopicSessionStatusInfoUpdate); unsubscribe(queueId: Constants.messageTopicLocationStatusUpdated); + + // Entferne Listener für Sprachänderungen + AppLocalizations().languageNotifier.removeListener(_onLanguageChanged); super.dispose(); } diff --git a/lib/main.dart b/lib/main.dart index 7076fc7..8926d23 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -57,6 +57,7 @@ Future main() async { MQClient.instance.declareQueue(Constants.messageTopicUpdateBadges); MQClient.instance.declareQueue(Constants.messageTopicRemoveState0JobFromMap); MQClient.instance.declareQueue(Constants.messageTopicBWVEnabled); + MQClient.instance.declareQueue(Constants.messageTopicLanguageChanged); final dir = await getApplicationDocumentsDirectory(); MyApp.objectBoxStore = await openStore(directory: dir.path); diff --git a/lib/popups/infos_popup.dart b/lib/popups/infos_popup.dart index d76855f..bac62ca 100644 --- a/lib/popups/infos_popup.dart +++ b/lib/popups/infos_popup.dart @@ -37,13 +37,10 @@ void showInfosPopup(SessionStatus? status) async { } void onLanguageChanged(AppLanguage? newLanguage) { - if (newLanguage != null) { + if (newLanguage != null && newLanguage != AppLocalizations().currentLanguage) { AppLocalizations().setLanguage(newLanguage); setState(() {}); - - // Sende Nachricht an MainPage, um UI zu aktualisieren - // Wir verwenden einen einfachen Ansatz: Die App wird neu geladen - // In einer echten App würde man hier einen State-Management-Mechanismus verwenden + // Der ValueNotifier in AppLocalizations signalisiert die Änderung automatisch } } diff --git a/lib/tools/app_localizations.dart b/lib/tools/app_localizations.dart index eee638a..690a111 100644 --- a/lib/tools/app_localizations.dart +++ b/lib/tools/app_localizations.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:stadtbote/tools/util.dart'; enum AppLanguage { @@ -33,12 +34,16 @@ class AppLocalizations { static const String _prefsLanguageKey = 'app_language'; + // ValueNotifier für Sprachänderungen + final ValueNotifier languageNotifier = ValueNotifier(AppLanguage.german); + AppLanguage _currentLanguage = AppLanguage.german; AppLanguage get currentLanguage => _currentLanguage; void setLanguage(AppLanguage language) { _currentLanguage = language; + languageNotifier.value = language; Util.preferencesSaveString(_prefsLanguageKey, language.code); } @@ -46,6 +51,7 @@ class AppLocalizations { final savedCode = Util.preferencesGetString(_prefsLanguageKey, null); if (savedCode != null) { _currentLanguage = AppLanguage.fromCode(savedCode); + languageNotifier.value = _currentLanguage; } } diff --git a/lib/tools/constants.dart b/lib/tools/constants.dart index f067c09..95f2122 100644 --- a/lib/tools/constants.dart +++ b/lib/tools/constants.dart @@ -25,6 +25,7 @@ class Constants { static const String messageTopicRequestConnectionStatus = "request_connection_status"; static const String messageTopicCurrentConnectionStatus = "current_connection_status"; static const String messageTopicBWVEnabled = "bwv_enabled"; + static const String messageTopicLanguageChanged = "language_changed"; static const String messageShowPopup = "show_popup"; diff --git a/lib/tools/messages/language_changed_message.dart b/lib/tools/messages/language_changed_message.dart new file mode 100644 index 0000000..a1ed41c --- /dev/null +++ b/lib/tools/messages/language_changed_message.dart @@ -0,0 +1,7 @@ +import 'package:stadtbote/tools/app_localizations.dart'; + +class LanguageChangedMessage { + final AppLanguage newLanguage; + + LanguageChangedMessage(this.newLanguage); +}