Flutter 0.7.0 migration / Migration auf Flutter 0.7.0
Deutsch
Ab 0.7.1 unterstützen iOS und macOS sowohl Swift Package Manager als auch CocoaPods aus denselben Swift-Quellen. Der lokale Swift-Package-Verweis auf FlutterFramework bindet ausschließlich das von Flutter bereitgestellte SDK ein. Android verwendet Built-in Kotlin; die Beispiel-App aktiviert android.builtInKotlin=true unter AGP 9.1. Die bisherigen Mindestversionen Flutter 3.47.7 / Dart 3.13.5 bleiben unverändert. Die Beispiel-App setzt den von AGP verwendeten Kotlin-Compiler auf 2.4.0, da der mit AGP gelieferte Standard 2.2.10 unter der vom lokalen Flutter-SDK geforderten Mindestversion 2.2.20 liegt. Dies ist eine Build-Tool-Konfiguration; das separate Kotlin-Android-Plugin wird weiterhin nicht angewendet.
tecexpress hat keine direkten externen Laufzeit-Abhängigkeiten mehr. Die einzigen Laufzeitpakete stammen aus dem Flutter-SDK: flutter, flutter_localizations und flutter_web_plugins. SDK-interne transitive Pakete, etwa intl, bleiben Teil von Flutter. Entwicklungswerkzeuge wie flutter_lints sind weiterhin erlaubt.
Datei-API
- Alle bisherigen
XFile-Parameter, Datenquellen und Callbacks verwendenTxFile. XFile.fromData(bytes, name: 'a.txt')wird zu
TxFile.fromData(bytes, name: 'a.txt'); name ist erforderlich, path entfällt.
XFile(path)wird auf nativen Plattformen zuTxFile.fromPath(path).- Die Fremdmethoden
readAsString,lastModifiedundsaveToentfallen.
Text kann mit utf8.decode(await file.readAsBytes()) aus dart:convert gelesen werden; für interaktives Speichern TxFileDialogs.saveFile verwenden.
- Fremde
XFile-Objekte explizit konvertieren, falls die Anwendung selbst solche
Pakete verwendet: Bytes lesen und TxFile.fromData aufrufen.
TxFileDialogs.pickFiles(multiple: true, extensions: ['txt'])liefert eigene
Dateien. Abbruch liefert []. TxFileDialogs.saveFile(file) liefert bei Abbruch false. Im Web bestätigt true nur das Auslösen des Browserdownloads.
openRead(start, end)liest einen Bytebereich: Start inklusive, Ende exklusiv.
readAsBytes() lädt den gesamten Inhalt. path ist im Browser null.
- Eigene Dateien und Ergebnisse von
pickFilesnach Gebrauch mitawait file.dispose()
freigeben. Danach sind keine Leseoperationen mehr erlaubt. fromPath löscht die Originaldatei niemals. Dialog-/Drop-Dateien werden in unabhängigen Speicher kopiert.
- Der Uploader entsorgt nur Dateien aus seinen eigenen Dialogen und Drops, bei
Ersetzung oder Entfernen des Widgets. Vom Aufrufer gelieferte Dateien bleiben dessen Verantwortung. Callback-Empfänger müssen benötigte Inhalte vor der Freigabe selbst kopieren. Ordner-Drops werden nicht unterstützt.
txHttpUpload behält seinen Multipart-/Chunk-Vertrag und Fortschritt nach erfolgreich abgeschlossenen Chunks. Native Uploads lesen Dateien als Stream. Browser-XHR und Blob-Downloads unterliegen den Speicher- und Berechtigungsgrenzen des Browsers. Browser-CORS, verbotene HTTP-Header sowie mobile HTTPS-Regeln gelten unverändert.
Plattformkonfiguration
Nach dem Update flutter pub get ausführen und die Anwendung vollständig neu bauen; Hot Reload registriert das neue native Plugin nicht.
- Android: System-Dateidialoge benötigen keine allgemeine Speicherberechtigung.
Für Netzwerkzugriffe android.permission.INTERNET im App-Manifest deklarieren.
- iOS: Dokument-Picker und Exportdialog verwenden die Systemoberfläche. Externe
Dateidrops benötigen ein Gerät und eine Quelle, die Dateien bereitstellt.
- macOS: Für Sandbox-Apps
com.apple.security.files.user-selected.read-write
setzen; für HTTP com.apple.security.network.client. Die Beispiel-App enthält diese Entitlements. Security-scoped Quelldateien werden während des Kopierens geöffnet.
- Windows: COM/OLE wird eingebaut verwendet. Flutter benötigt wie bei anderen
nativen Plugins lokale Symlink-Unterstützung beziehungsweise Entwicklermodus.
- Linux: GTK 3 und GIO/GDBus aus der Systeminstallation verwenden; keine Dart-D-Bus-
oder FFI-Abhängigkeit. File-Transfer-Portal-Drops benötigen ein laufendes Desktop-Portal.
- Web: Moderne Browser mit
dart:js_interop; keine eigene JavaScript-Datei einbinden.
Dateidialoge/Downloads durch eine Benutzeraktion auslösen. JavaScript und WASM werden gebaut. Browserdownloads bieten keine zuverlässige Abbruchbestätigung.
Datumsausgaben unterstützen Deutsch/Englisch einschließlich regionaler Locale-Tags; andere Sprachen fallen auf Englisch zurück. Der Datumseditor nutzt die Material-Lokalisierung der App.
English
Version 0.7.1 adds Swift Package Manager support for iOS/macOS alongside CocoaPods, sharing the same sources. The local FlutterFramework package is provided by Flutter itself. Android uses built-in Kotlin, enabled in the example under AGP 9.1. The minimum Flutter/Dart versions remain unchanged.
Version 0.7.0 replaces the third-party XFile type with TxFile and removes all direct non-SDK runtime dependencies. Flutter's own transitive dependencies remain. Use TxFile.fromData(bytes, name: 'a.txt') for memory files and TxFile.fromPath(path) for native paths. Use TxFileDialogs.pickFiles and TxFileDialogs.saveFile for built-in dialogs. Cancellation returns [] or false; browser downloads can only confirm initiation. Release owned files with dispose. Disposing a path-backed file never deletes the source file. Files supplied through uploader data sources remain owned by the caller; files acquired by the uploader are released when replaced or when its widget is disposed. Copy callback contents if you need them beyond this lifetime. Directory drops are unsupported.
Run flutter pub get and rebuild the app after upgrading. Android network requests require INTERNET permission. Sandboxed macOS apps require user-selected read/write file access and network-client entitlements. Linux uses system GTK/GIO and the desktop file-transfer portal. Web code uses modern JS interop and supports JS/WASM; no additional JavaScript setup is required. Browser security, CORS and mobile HTTPS restrictions still apply. Date labels support German/English with English fallback.
Platform acceptance checklist / Plattformabnahme
Run flutter run -t lib/file_probe.dart in flutter/example on each platform. Pick multiple .txt files, cancel the picker, save the three-byte sample, cancel saving, drop ordinary files, reject a folder, scroll the uploader, and repeat with two uploaders (one disabled). Verify that file contents remain readable after a drop and that temporary files disappear after disposal. Test Unicode filenames, large files and a second Flutter view. On Linux additionally drop from a sandboxed source using application/vnd.portal.filetransfer; on Windows test a virtual file from a mail client; on iOS test provider-backed files and rotation during a dialog.
Build checks and mocked channel tests do not establish device-level acceptance. Record unperformed platform/device checks in the release handover; do not publish 0.7.0 as fully verified until these checks have been completed.