gsd_utilities 0.0.42
gsd_utilities: ^0.0.42 copied to clipboard
Flutter utilities for config management, local storage, and file uploads to DOCUframe.
0.0.42 #
- ConfigStore: Neuer feldbasierter, prozesssicherer Konfigurationsspeicher (GSDConfigStore, GSDConfig, GSDConfigItem, GSDConfigValue, GSDConfigOptionalValue, GSDConfigCollection). Jedes Feld ist ein eigener Key und deklariert, ob es im sicheren Speicher liegt. Bisher lag die Config als ein JSON-Block vor, sodass zwei parallel laufende Instanzen derselben App (mehrere Fenster, Tabs, Notification-Prozess) sich gegenseitig überschrieben.
- ConfigStore: Öffentliche Werte liegen auf allen Plattformen außer Web in
SharedPreferencesAsync, auf Web im localStorage. Secrets liegen auf allen Plattformen in FlutterSecureStorage, auch auf Web (WebCrypto AES-GCM). Der EncryptionManager wird nur noch zum Lesen der alten Web-Blöcke gebraucht. - ConfigStore: Unter Windows, macOS und Linux wird die Plattform-Implementierung von
shared_preferencesgetauscht:GSDSqliteSharedPreferencesPlatform.register()registriert ein SQLite-Backend (GSDSqlitePreferencesStorage,sqflite_common_ffi, WAL, kein Prozess-Cache) im App-Support-Verzeichnis. Die Plugins für Windows und Linux halten alle Werte im Prozess-Cache und schreiben bei jedem Set die ganze JSON-Datei neu, was bei mehreren Prozessen Daten verliert; macOS läuft für ein einheitliches Verhalten auf dem Desktop ebenfalls über SQLite. Die Registrierung gilt für alle danach erzeugtenSharedPreferencesAsync-Objekte der App; bisherige Werte des Plugins werden nicht übernommen. - ConfigStore: Unter Windows wird auch die Plattform-Implementierung von
flutter_secure_storagegetauscht:GSDSqliteSecureStoragePlatform.register()speichert jedes Secret einzeln DPAPI-verschlüsselt als Zeile ingsd_secure_storage.db(GSDSqliteSecretStorage,GSDDpapiSecretCipher). Das Windows-Plugin hält alle Secrets in einer Datei und schreibt sie bei jedem Zugriff komplett neu: zwei Prozesse verlieren dabei gegenseitig Werte, ein gleichzeitiger Leser kann eine halb geschriebene Datei sehen, und das Plugin löscht sie dann samt aller Secrets. Ein nicht entschlüsselbarer Eintrag wirftGSDSecretUnreadableExceptionund wird nie gelöscht. Die Registrierung gilt für alle Nutzer vonFlutterSecureStoragein der App; bisherige Einträge des Plugins werden nicht übernommen. Unter macOS und Linux bleiben Secrets im Plugin (Keychain, libsecret), das jeden Eintrag einzeln hält und prozesssicher ist. Im Browser wirftGSDDpapiSecretCipherUnsupportedError. - ConfigStore: Prozessübergreifender, exklusiver Lock pro Namespace: Dateilock neben der Datenbank auf Windows/macOS/Linux, Web Locks API im Browser, In-Process-Lock auf Android/iOS. Alle Zugriffe laufen unter diesem Lock,
loadliest immer frisch;batchschreibt mehrere Felder unter einem Lock. - ConfigStore:
GSDConfigStoreFactory.forPlatform({directory, legacyKey})verdrahtet die Backends der Plattform (asynchron).directorygilt auf dem Desktop (Ort von Datenbank und Lock-Dateien, Default App-Support-Verzeichnis). - ConfigStore: Einmalige Migration der alten JSON-Blöcke des
GSDConfigManager(config,config_secure) über einen App-Hook (migrate:inload); andere Daten werden nicht migriert. Die alten Blöcke bleiben erhalten. Auf dem Desktop werden sie aus den ersetzten Plugins gelesen (GSDSqliteSharedPreferencesPlatform.replaced, unter WindowsGSDSqliteSecureStoragePlatform.replaced). Der öffentliche Block wird auch im sicheren Speicher gesucht, wo ihn derGSDConfigManagerbis 0.0.34 ablegte. Kann ein alter Block nicht gelesen werden, wird die Migration verschoben (migrationDeferred, Fehler insecureError) statt als erledigt markiert; bei einer nachgeholten Migration wird der Collection-Index mit vorhandenen Ids zusammengeführt. - ConfigStore: Secrets werden nur geschrieben, wenn die App sie explizit setzt; ein leeres Secret löscht den Key. Ein Lesefehler im sicheren Speicher wird über
secureErrorundloadErrordes Feldes gemeldet. DerbackgroundModedes alten Managers entfällt damit. - LocalStorageManager:
containsKeyundremoveDatahinzugefügt. - Example: Plattform-Ordner für Windows, Android, iOS, macOS und Linux; Self-Test des ConfigStore mit mehreren Store-Instanzen als
integration_testund In-App-Screen, unter Windows zusätzlich mit echten Kindprozessen. - Abhängigkeiten:
sqflite_common_ffi,path_provider,shared_preferences_platform_interface,flutter_secure_storage_platform_interface,win32,ffi; SDK-Untergrenze^3.10.0. - Der bisherige
GSDConfigManagerbleibt unverändert erhalten.
0.0.41 #
- ConfigManager: Sensible Daten werden nicht mehr gespeichert, wenn der Datensatz keine Werte enthält. Bisher hat ein Datensatz wie {"Account":{"password":""}} den Guard
!= "{}"passiert und die gespeicherten Secrets überschrieben. - ConfigManager: Lesefehler im sicheren Speicher werden über GSDConfigResult.secureDataLoaded und .secureError gemeldet, statt als "keine Secrets vorhanden" durchzugehen.
- ConfigManager: saveConfig lädt die Config nicht mehr neu. Das Neuladen hat die übergebene Instanz aus den öffentlichen Daten neu aufgebaut und dabei kurzzeitig ihre Secrets verworfen.
- ConfigManager: loadConfig meldet ein bestehendes Abonnement ab, bevor es neu abonniert. Bisher sammelte sich pro Ladevorgang ein weiterer Handler an.
- ConfigManager: Laden und Speichern werden pro Storage-Key serialisiert, damit ein Speichern nicht mehr in das Zeitfenster eines Ladevorgangs fallen kann.
- ConfigManager: Ist noch nichts gespeichert (frische Installation), wird die uebergebene Config-Instanz trotzdem abonniert. Vorher wurde nur bei erfolgreichem Laden abonniert, dadurch konnte in so einer Sitzung gar nichts gespeichert werden.
0.0.39 #
- Update flutter_secure_storage
0.0.38 #
- gsd_restapi version updaten
0.0.37 #
- ConfigManager Hintergrundmodus hinzufügen. (Damit in IOS nicht auf die KeyChain geschrieben wird wenn die App im hintergrund ist)
0.0.36 #
- ConfigManager Secure Storage Problem
0.0.35 #
- ConfigManager Secure Storage Problem
- Konfigurationsverwaltung aktualisiert um SharedPreferences für öffentliche Daten und FlutterSecureStorage für sensible Daten zu verwenden; shared_preferences Abhängigkeit hinzugefügt
0.0.34 #
- ConfigManager Secure Storage Problem
0.0.33 #
- Dependency Updates
- gsd_restapi version updaten
- CI-Update
- Flutter secure storage version auf 10.0.0 aktualisiert
0.0.24 #
- GSDNotificationsHelper für Web-Benachrichtigungen hinzugefügt
- Browser-Erkennung (Chrome, Edge, Firefox, Safari)
- Notification-Berechtigungsmanagement (anfordern, Status prüfen)
- showNotification() für Web-Browser
- Automatisches Schließen nach 5 Sekunden
- Plattform-spezifische Implementierung (Web vs. Native)
- Vollständiges Example mit interaktiver Demo
0.0.23 #
- gsd_restapi version updaten
0.0.22 #
- gsd_restapi version updaten
0.0.21 #
- gsd_restapi version updaten
0.0.20 #
- GSDUploadFile auf RestAPIUploadFile anpassen
0.0.19 #
- RestAPIUploadFile einbauen | Refaktor, Entfernen von unnötigen packages
- CI-Update - Automatisches Code Fix, formatieren und analysieren
0.0.18 #
- gsd_restapi version updaten
0.0.17 #
- gsd_restapi version updaten
0.0.16 #
- gsd_restapi version updaten
- iOS Keychain-Probleme behoben
0.0.15 #
- gsd_restapi version updaten
- iOS Keychain-Probleme behoben
- FlutterSecureStorage mit optimierten iOS-Einstellungen konfiguriert
0.0.14 #
- gsd_restapi version updaten
- Config aus Secure-Storage dreimal zu lesen versuchen
0.0.13 #
- Demo Link hinzufügen in README.md
- CI-Update - Automatisches Formatieren vom Code bevor es in pub.dev hochgeladen wird.
0.0.12 #
- GSDMultiLanguageProvider überarbeiten
- Extensions hinzufügen
0.0.11 #
- GSDMultiLanguageProvider mit Dependency Injection Support
- Abstrakte Interfaces für flexible Datenquellen (IGSDMultiLanguageDataProvider)
- Konfigurationspersistierung über IGSDMultiLanguageConfigProvider
- Analytics/Logging Support über IGSDMultiLanguageAnalyticsProvider
- GSDLanguage Klasse für Sprachmetadaten mit JSON-Serialisierung
- Event-basierte Benachrichtigungen bei Sprachwechseln
- Parametrisierte Textübersetzungen mit Platzhalter-Support
- MultiLanguageExampleScreen mit interaktiver Demonstration
- Automatisches Fallback zur ersten verfügbaren Sprache
- Loading-States und Fehlerbehandlung für bessere UX
0.0.10 #
- CI-Update - überprüfen das die CHANGELOG.md einen Eintrag für die nächste Version enthält.
- CI-Update - Automatisches Formatieren vom Code bevor es in pub.dev hochgeladen wird.
0.0.9 #
- DOCUframeAccount Konstruktor Parameter fix
0.0.5 #
- Beispiel Bugfix
- CI-Update
0.0.2 #
- CI-Update - Beispiel App mit erstellen
- GSDUriManager für Browser URI-Manipulation implementieren
0.0.1 #
- Plattformübergreifende Konfigurationsverwaltung mit automatischer Plattformauswahl
- Web: Verschlüsselter LocalStorage mit AES-Verschlüsselung
- Mobile/Desktop: FlutterSecureStorage für sichere Datenpersistierung
- Event-basierte Benachrichtigungen bei Konfigurationsänderungen
- LocalStorage mit Cross-Tab-Kommunikation über JavaScript Interop
- Automatische Storage-Event-Erkennung zwischen Browser-Tabs
- File Upload System mit Real-time Fortschrittsverfolgung
- Unterstützung für lokale Dateien und Web-Uploads
- Automatische Bilderkennung und -verarbeitung
- Batch-Upload-Funktionalität für mehrere Dateien
- DOCUframe Integration mit Account-Management
- Upload-Manager mit REST-API-Integration
- Bildformat-Erkennung für Uint8List-Daten
- Vollständige Dokumentation aller Klassen und Methoden