Flutter besteht im Kern aus dem Dart-Framework und einer Rendering Engine, welche auf dem jeweiligen Host-Betriebssystem durch einen Embedder verwaltet werden. Der Embedder bewirkt, dass Flutter unter der Haube zu nativen Android- bzw. iOS-Code kompiliert wird und somit performance-mäßig mit nativ implementierten Apps gleichzieht.
Die Bibliotheken
Das Dart-Framework stellt neben regulären Dart-Bibliotheken auch die dart:ui Bibliothek bereit. Diese beinhaltet sogenannte Widgets, mit denen herkömmliche Android- und iOS-UI-Elemente abgebildet werden können.
Die Grafik-Engine
Ein Vorteil, der Flutter von anderen gängigen Cross-Platform-Frameworks abhebt, ist, dass Flutter Kontrolle über jeden Pixel hat, der gerendert wird. (Andere Frameworks wie beispielsweise Xamarin und React Native sind für das Rendern vom jeweiligen Betriebssystem abhängig.)
Ermöglicht wird das durch die zugrunde liegende Grafik-Engine Skia, die nicht die OS-spezifischen UI-Komponenten verwendet, sondern pixel-genaue Abbilder dieser rendert.
Somit bleibt dem Entwickler selbst die Wahl, ob eine App auf beiden Plattformen identisch sein soll, oder plattformspezifisches Aussehen und Verhalten mit sich bringen soll, wie beispielsweise Cupertino Widgets und ein eigenes „Zieh“-Verhalten bei Listen unter iOS-Geräten.
Die Flutter-Engine ist auf geringe Latenz und hohe Bildraten optimiert. Die Engine ist laut Google in der Lage, eine Bildschirmfrequenz von 120Hz generieren. Da der Großteil der heutigen Smartphones allerdings 60Hz-Displays besitzt, ist der Standard-Output von Flutter auf 60 Bilder pro Sekunde begrenzt.
Plattformspezifischer Code
Für den Fall, dass neuere OS-spezifische APIs oder Frameworks noch nicht von Flutter adaptiert worden sind, bietet Flutter jederzeit die Möglichkeit, plattformspezifischen Code einzubinden, entweder direkt oder als Plugin. Ebenso ist es möglich, eine bereits bestehende Android- oder iOS-App mit Flutter-Komponenten zu erweitern. Durch diesen Ansatz wird die Engine umgangen.
1 Comment
Super geschriebener und informativer Artikel :-). In diesen Blog werde ich mich noch richtig einlesen