Änderungen

Zur Navigation springen Zur Suche springen
Zeile 5: Zeile 5:     
Als Programmiersprache wird [[Dart]] genutzt. Die Benutzerelemente sehen zwar aus wie native Elemente; sie werden aber auf Pixelbasis von den Flutter-Komponenten selbst errechnet.
 
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 ==
 
== Programmierparadigmen ==
Zeile 18: Zeile 31:  
* UI (möglichst keine Logik, keine veränderbaren Daten)
 
* UI (möglichst keine Logik, keine veränderbaren Daten)
 
* App State-Management (nur Logik und Daten)
 
* App State-Management (nur Logik und Daten)
* Business Logic (nur Logik und Daten, Persistenz)
+
* Business Logic (nur Logik und Daten, Persistenz, Netzwerk-Zugriff ...)
    
Siehe auch
 
Siehe auch
 
* https://suragch.medium.com/flutter-state-management-for-minimalists-4c71a2f2f0c1
 
* https://suragch.medium.com/flutter-state-management-for-minimalists-4c71a2f2f0c1
 
* BLoC
 
* BLoC
 +
* GetIt
 +
 +
=== immutable state ===
 +
 +
Benütze so oft als möglich "final"!
    
== Besonderheiten ==
 
== Besonderheiten ==
Zeile 40: 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
 +
 +
== Weiterführendes ==
 +
 +
Siehe
 +
* https://github.com/Solido/awesome-flutter
    
----------
 
----------

Navigationsmenü