| Zeile 1: |
Zeile 1: |
| | | | |
| | | | |
| − | * [https://flutter.dev/ Flutter] | + | * [https://flutter.dev/ Flutter] ist ein [[Open Source]]-Framework, um native [[Android]]-, [[iOS]]-, [[Linux]]- und [[Windows]]- sowie Web-Anwendungen zu bauen. |
| | ** mit [https://docs.fluxbuilder.com/ Fluxbuilder ] | | ** mit [https://docs.fluxbuilder.com/ Fluxbuilder ] |
| | + | |
| | + | Als Programmiersprache wird [[Dart]] genutzt. Die Benutzerelemente sehen zwar aus wie native Elemente; sie werden aber auf Pixelbasis von den Flutter-Komponenten selbst errechnet. |
| | + | |
| | + | == Projektstruktur == |
| | + | |
| | + | Zur grundsätzlichen Struktur eines Dart-Projekts (package) siehe |
| | + | * https://dart.dev/tools/pub/create-packages |
| | + | * https://dart.dev/tools/pub/package-layout |
| | + | |
| | + | Ein Package umfasst ein oder mehrere Libraries. Eine Library ist üblicherweise ein Dart-File (Ausnahme: Einbindung anderern [generierter] Dateien mittels <code>part</code>-Direktive). |
| | + | Libraries im lib/-Verzeichnis sind public, wogegen solche im lib/src-Verzeichnis privat sind. |
| | + | |
| | + | Wenn man Flutter benutzt kann man die Struktur durch |
| | + | flutter create |
| | + | erzeugen lassen. |
| | + | |
| | + | == Programmierparadigmen == |
| | + | === State Management === |
| | + | |
| | + | Das State Management ist ähnlich demjenigen von [[React]] und [[React Native]], allerdings klassenbasiert. Die neueren funktionsbasierten Hooks (useXXX) aus der React-Welt gibt es in Flutter nicht. Dafür gibt es viele ähnliche App-State-Management-Libraries, teilweise Übertragungen aus der React-Welt wie [[Redux]] und [[MobX]]. |
| | + | |
| | + | Das State-Management erfolgt (ohne Library-Ergänzung) mit |
| | + | * StatefulWidget oder |
| | + | * InheritedWidget. |
| | + | |
| | + | Man kann sich [https://suragch.medium.com/flutter-state-management-for-minimalists-4c71a2f2f0c1 für eine App drei Schichten] vorstellen: |
| | + | * UI (möglichst keine Logik, keine veränderbaren Daten) |
| | + | * App State-Management (nur Logik und Daten) |
| | + | * Business Logic (nur Logik und Daten, Persistenz, Netzwerk-Zugriff ...) |
| | + | |
| | + | Siehe auch |
| | + | * https://suragch.medium.com/flutter-state-management-for-minimalists-4c71a2f2f0c1 |
| | + | * BLoC |
| | + | * GetIt |
| | + | |
| | + | === immutable state === |
| | + | |
| | + | Benütze so oft als möglich "final"! |
| | | | |
| | == Besonderheiten == | | == Besonderheiten == |
| Zeile 20: |
Zeile 58: |
| | Siehe | | Siehe |
| | * https://github.com/dart-lang/sdk/issues/44848 | | * https://github.com/dart-lang/sdk/issues/44848 |
| | + | |
| | + | === JSON === |
| | + | |
| | + | ==== JSON serialization ==== |
| | + | |
| | + | Dart hilft beim Einpacken von Daten in JSON und dem Auspacken. Allerdings ist es nicht [[JavaScript]] oder [[TypeScript]], das ein first-class-Handling von [[JSON]] ermöglichen. |
| | + | |
| | + | Hilfreiche Libraries sind |
| | + | |
| | + | * json_serializable |
| | + | * built_value |
| | + | * deep_pick |
| | + | * [https://pub.dev/packages/equatable equatable] |
| | + | |
| | + | Siehe auch |
| | + | * https://codewithandrea.com/articles/parse-json-dart/ |
| | + | |
| | + | ==== Weitere Libraries für Behandlung von JSON in Dart/Flutter ==== |
| | + | Weitere hilfreiche Libraries mit JSON |
| | + | * [https://pub.dev/packages/json_path json_path] |
| | + | * [https://pub.dev/packages/rfc_6901 rfc_6901 - JSONPointer Implementierung] - kann JSON-Strukturen bearbeiten |
| | + | * [https://pub.dev/packages/flutter_json_view flutter_json_view] - kann JSON-Strukturen anzeigen |
| | + | |
| | + | == Libraries == |
| | + | |
| | + | === AppState-Libraries === |
| | + | |
| | + | Sehr einfache AppState-Libraries sind |
| | + | |
| | + | * get_it und |
| | + | * watch_it |
| | + | |
| | + | === UI-Libraries === |
| | + | |
| | + | * https://forui.dev/docs |
| | + | * https://flutter-shadcn-ui.mariuti.com/ |
| | + | |
| | + | === Datenbank === |
| | + | |
| | + | ==== SurrealDB ==== |
| | + | |
| | + | [[SurrealDB]] kann mit dem Package [https://github.com/duhanbalci/surrealdb_flutter surrealdb von Duhanbalci] genutzt werden. |
| | + | |
| | + | ===== Problem mit Websocket-Subprotokoll ===== |
| | + | Stand Jan. 2025 gibt es noch ein Problem mit einem "Subprotokoll" der Websocket-Schnittstelle. Näheres dazu unter dem [https://github.com/duhanbalci/surrealdb_flutter/issues/26 (allerdings geschlossenen) Issue auf GitHub]. |
| | + | |
| | + | ==== CouchDB ==== |
| | + | |
| | + | * Couchbase Lite |
| | + | ** [https://pub.dev/packages/cbl_flutter cbl_dart] - alle Plattformen außer Web |
| | + | ** [https://pub.dev/packages/cbl_flutter cbl_flutter] nur für Android |
| | + | |
| | + | |
| | + | * [https://pub.dev/documentation/wilt/latest/wilt/Wilt-class.html Wilt] - CouchDB client for server and flutter-based mobile |
| | + | * [https://pub.dev/packages/sporran Sporran] basiert auf Wilt, kann aber auch lokal arbeiten und wie [[PouchDB]] mit einer entfernten Instanz synchronisieren. Wohl nur für Web-Plattform. |
| | + | |
| | + | ==== Weitere Datenbanken ==== |
| | + | |
| | + | * [[Sembast]] |
| | + | * sqflite - SQLLite für Flutter |
| | + | * Floor - basiert auf sqflite |
| | + | ** https://quashbugs.com/blog/exploring-flutters-floor-library-for-efficient-data-persistence |
| | + | * Hive |
| | + | |
| | + | |
| | + | === Offline-First === |
| | + | |
| | + | Insbesondere mobile Apps müssen damit zurechtkommen, dass Datenänderungen nicht sofort zum zentralen Server oder zum Client kommen. Auch dafür gibt |
| | + | es Libraries, die helfen, wenn die Datenbank das nicht selbst tut (z.B. bei [[PouchDB]]): |
| | + | |
| | + | * [https://pub.dev/packages/fast_sync_hive_dao FastSync] |
| | + | ** https://pub.dev/packages/fast_sync_client |
| | + | * https://code.zeba.academy/offline-apps-flutter-syncing-data-handling-connectivity-issues/ - Anleitung mit Hilfe der lokalen Datenbank [[Sembast]] |
| | + | * https://www.powersync.com/blog/flutter-tutorial-building-an-offline-first-chat-app-with-supabase-and-powersync - Anleitung mit Hilfe von SQLite, Supabase und PowerSync |
| | + | * https://flutterdata.dev/ |
| | + | ** https://github.com/flutterdata/flutter_data |
| | + | * https://dev.to/anurag_dev/implementing-offline-first-architecture-in-flutter-part-1-local-storage-with-conflict-resolution-4mdl |
| | + | * https://www.dhiwise.com/post/navigating-offline-database-in-flutter-a-comprehensive-guide |
| | + | * https://pub.dev/packages/offline_sync |
| | + | |
| | + | == IDE etc. == |
| | + | |
| | + | * https://dartpad.dev/ - einfache Dart/Flutter-Schnipsel ausprobieren |
| | + | * Visual Studio Code mit der Flutter-Erweiterung |
| | + | |
| | + | == Weiterführendes == |
| | + | |
| | + | Siehe |
| | + | * https://github.com/Solido/awesome-flutter |
| | | | |
| | ---------- | | ---------- |