Flutter
Flutter ist ein Framework zur Entwicklung
grafischer Applikationen, die auf den folgenden Plattformen lauffähig sind:
- in Webbrowsern
- nativ auf den Mobil-Betriebssystemen Android und iOS
- nativ auf Desktop-Betriebssystemen Linux, macOS und Windows
Cross-Kompilierung nativer Flutter Applikationen ist nicht möglich.
Diskussion
Chancen:
- Grafische Applikationen können ohne oder mit geringem Zusatzaufwand für mehrere Plattformen
angeboten werden.
- Aussehen und Verhalten sind auf allen Plattformen gleich.
- Bei Web-Applikationen kann unnötige Komplexität (z.B. durch JavaScript, Loader, Bundler) vermieden werden.
- Hot Reload ermöglicht kurze
Entwicklungszyklen
Risiken:
- Google könnte sein Engagement in Flutter und/oder Dart reduzieren oder beenden.
- Flutter könnte nicht oder nicht schnell genug an Veränderungen in der jeweiligen Plattform
angepasst werden.
- Flutter Widgets:
- Widgets können in Aussehen und Verhalten von der zugrundeliegenden Plattform abweichen,
insbesondere bzgl. Accessibility
- In Web-Applikationen kann, aufgrund der Darstellung in einem
Canvas, der
DOM-Baum nicht abgefragt oder verändert werden, z.B. durch Webscraping oder Adblocker
- Dart muss im Frontend verwendet werden
Architektur
Flutter Applikationen werden mit dem Flutter Framework in der
Programmiersprache Dart entwickelt.
Die Flutter Widgets sind ebenfalls in Dart implementiert.
Die Flutter Engine rendert die Widgets
mittels Skia und bildet die Schnittstelle zur
zugrundeliegenden Plattform.
Das Programmiermodell ist reaktiv:
- Die von widgets.Widget
abgeleiteten Klassen stellen lediglich unveränderliche Konfigurationen der Widgets dar.
- Die tatsächlichen Widget-Objekte sind Instanzen der von
widgets.Element abgeleiteten
Klassen. Sie werden durch Aufruf der zugehörigen
Widget.createElement()
Methode erzeugt.
- Layouting und Rendering der Widgets erfolgen durch Instanzen von Klassen,
die von widgets.RenderObject
abgeleitet sind. Sie werden durch Aufruf der zugehörigen
Element.renderObject()
Methode erzeugt.
TODO: Veränderung
Widget.canUpdate()
updateRenderObject()
TODO minimiert Garbage Collection: Objekte bleiben erhalten, Objekte sind klein, da sie wenig Verantwortung haben
https://medium.com/flutter/flutter-dont-fear-the-garbage-collector-d69b3ff1ca30
Benutzung
TODO
StatelessWidget
StatefulWidget
RenderObjectElement
Software, die Flutter verwendet
Desktopumgebungen: Fuchsia,
Ubuntu
Apps:
AuthPass, Brewery, Dart & Flutter DevTools, Epic Ride Weather, Flokk, Flutter Gallery, Flutter Music Player, Flutter Widget Inspector, GitJournal, Google Pay, Harmonoid, inKino, Insight Timer, Invoice Ninja App, My BMW, Reflectly, Rosbank Business App, Rows, Time Cop, Ubuntu Desktop Installer, Voicelinermit Rust:
AppFlowy.IO, ESSE
Kontakt • made with makāmau