Cross-Plattform Entwicklung mit Dart und Flutter

3 Min. Lesezeit
Dienstag, 11. Februar 2020

Wir haben uns hier im cubido Blog bereits schon öfter mit dem Thema der Cross-Plattform Entwicklung beschäftigt. Bisher haben wir uns Capacitor, React Native und Xamarin angesehen. Die Welt der Web- und App-Entwicklung entwickelt sich aber schnell weiter. Gefühlt jede Woche kommt ein neues Framework auf den Markt, das alles besser machen will als seine Vorgänger. Um hier am Ball zu bleiben, sollte man immer wieder einmal vielversprechende Neuankömmlinge unter die Lupe nehmen. Aus diesem Grund haben wir uns diesmal Flutter näher angesehen.

Überblick

Flutter ist ein seit 2017 von Google entwickeltes Cross-Plattform Framework für iOS, Android und Web Apps. Es basiert auf der seit 2011 ebenfalls eigenentwickelten Sprache Dart. Das scheint auf den ersten Blick sehr wagemutig. Warum nimmt man den Aufwand und das Risiko auf sich, nicht nur ein neues Framework, sondern auch gleich eine neue Sprache auf den Markt zu bringen? Über die Motivation können wir nur spekulieren. In der Praxis zeigt sich aber, dass Dart sehr leicht zu erlernen ist. Man stelle sich eine ausgewählte Mischung aus objektorientierten Sprachen wie Java oder C# und JavaScript vor. Asynchrone Methoden werden beispielsweise mit "async" markiert, returnieren aber keine Promises sondern Futures. Die Syntax ist sehr reduziert, man braucht zum Beispiel kein "new" um Objekte zu erzeugen. Der wichtigste Unterschied zu anderen Technologien ist aber, dass das Layout ausschließlich im Code definiert wird.

User Interface

Das scheint auf den ersten Blick aufwendig und altmodisch. Man kann in Java oder C# auch programmatisch Benutzeroberflächen erzeugen, aber das ist sehr mühselig und nicht mehr zeitgemäß. In den letzten 10 Jahren war es eher üblich, entweder einen Editor bereitzustellen oder eine spezielle Beschreibungssprache wie HTML oder XAML anzubieten. Beide Ansätze haben aber ihre Nachteile. UI im Code zu beschreiben ist meist unintuitiv und zeitaufwendig. Beschreibungssprachen dagegen können oft erst zur Laufzeit feststellen, ob Eigenschaften oder Referenzen wirklich existieren. Dart löst dieses Problem sehr elegant. Die Beschreibung des UI ist so einfach, dass man fast glaubt es handle sich um eine Beschreibungssprache. Gleichzeitig ist man aber typsicher unterwegs und es ist schon beim Kompilieren klar, ob das UI syntaktisch fehlerfrei ist. Nicht, dass Kompilieren ein Aufwand wäre, denn mittels Hot-Reload kann man Änderungen in Sekundenbruchteilen auf das Testgerät übertragen und ausprobieren.


Tooling

Generell ist das Tooling von Dart und Flutter exzellent. Von der ersten Installation, über den Build, die Dokumentation und die Debug Tools fühlt sich alles an wie aus einem Guss. Das initiale Setup erfolgt fast automatisch, man kann wie in der Web-Entwicklung Elemente zur Laufzeit inspizieren und der Hot-Reload behält den Zustand aktueller Komponenten bei. Flutter ist auch darauf ausgelegt Apps, wenn möglich, mit 60 FPS zu rendern und das merkt man beim Testen auch. Ohne andere Cross-Plattform Technologien zu mindern, aber unsere Flutter Demo App läuft wie geschmiert. Ruckler beim Scrollen oder Navigieren gibt es hier nicht.

Auch das Setup und Deployment auf iOS ist mit dem "flutter doctor" sehr einfach. Dieses Tool sagt uns Schritt für Schritt, ob uns zum Beispiel Xcode, Android Studio oder sonstige Abhängigkeiten fehlen und wie wir diese installieren können. Auch die Plugins für Kamera oder Dateisystem funktionieren auf Anhieb, wenn die Rechte dafür gegeben sind. Einzig fällt auf, dass zum Beispiel beim DatePicker das Material UI verwendet wird. Das ist nicht weiter tragisch, aber gibt Preis, dass es sich hier nicht um eine native App handelt, obwohl Dart auch bei iOS in nativen Code kompiliert wird.


Conclusio

Alles in allem wirkt Flutter sehr ausgereift. Es erinnert auf den ersten Blick an React Native im Bezug auf das gute Tooling und die Beschreibung des UI im Code. Allerdings setzt es, meiner Meinung nach, diese beiden Punkte besser um. Beide Projekte sind Open Source und es stehen jeweils große Firmen dahinter, aber Google scheint in Sachen Tools- und Framework-Entwicklung mehr Erfahrung zu haben als Facebook. Die wirkliche Frage ist jedoch, ob man ein großes App Projekt mit Flutter starten sollte. Dass Dart eine eher unbekannte Sprache ist, ist dieser Entscheidung natürlich nicht zuträglich.

Google verwendet Flutter für interne Anwendungen, sowie Google Assistent Apps und auch Philips Hue. Eine Alibaba App wurde damit ebenfalls bereits umgesetzt. Dennoch sieht die Showcase Seite von Flutter aus, als ob fast nur kleine Apps damit gebaut werden würden. Das entspricht vielleicht auch ihrer Philosophie, denn kleine Flutter Anwendungen kann man zum Beispiel auch als Modul in bereits existierende Apps integrieren. Für kleine Apps, Demos oder Prototypen eignet es sich auf jeden Fall gut, da die Einarbeitungszeit niedrig und die Entwicklungsgeschwindigkeit hoch ist. Bei größeren Projekten sollte man eventuell Vorsicht walten lassen.


Links