Skip to main content

gsd_utilities 0.0.42 copy "gsd_utilities: ^0.0.42" to clipboard
gsd_utilities: ^0.0.42 copied to clipboard

PlatformWindows

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_preferences getauscht: 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 erzeugten SharedPreferencesAsync-Objekte der App; bisherige Werte des Plugins werden nicht übernommen.
  • ConfigStore: Unter Windows wird auch die Plattform-Implementierung von flutter_secure_storage getauscht: GSDSqliteSecureStoragePlatform.register() speichert jedes Secret einzeln DPAPI-verschlüsselt als Zeile in gsd_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 wirft GSDSecretUnreadableException und wird nie gelöscht. Die Registrierung gilt für alle Nutzer von FlutterSecureStorage in 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 wirft GSDDpapiSecretCipher UnsupportedError.
  • 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, load liest immer frisch; batch schreibt mehrere Felder unter einem Lock.
  • ConfigStore: GSDConfigStoreFactory.forPlatform({directory, legacyKey}) verdrahtet die Backends der Plattform (asynchron). directory gilt 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: in load); andere Daten werden nicht migriert. Die alten Blöcke bleiben erhalten. Auf dem Desktop werden sie aus den ersetzten Plugins gelesen (GSDSqliteSharedPreferencesPlatform.replaced, unter Windows GSDSqliteSecureStoragePlatform.replaced). Der öffentliche Block wird auch im sicheren Speicher gesucht, wo ihn der GSDConfigManager bis 0.0.34 ablegte. Kann ein alter Block nicht gelesen werden, wird die Migration verschoben (migrationDeferred, Fehler in secureError) 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 secureError und loadError des Feldes gemeldet. Der backgroundMode des alten Managers entfällt damit.
  • LocalStorageManager: containsKey und removeData hinzugefügt.
  • Example: Plattform-Ordner für Windows, Android, iOS, macOS und Linux; Self-Test des ConfigStore mit mehreren Store-Instanzen als integration_test und 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 GSDConfigManager bleibt 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.7 #

  • gsd_restapi update

0.0.7 #

  • Refactor

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