Was ist so toll an Flutter?

Java 9 Bootcamp Logo

Flutter is Googles neues Framework zur Erstellung nativer Apps für iOS und Android mit DART. Unser Trainer Robin Nunkesser erklärt im Interview mit Toni Epple die wichtigsten Eigenschaften, und warum Flutter tatsächlich sehr vielversprechend ist.

Hallo Robin, erstmal herzlich willkommen als Trainer bei Eppleton! Wir freuen uns, dass Du unser Trainingsangebot um einige spannende Themen ergänzt. Du bist Professor für Mobile Computing und einer Deiner Forschungsschwerpunkte ist die Cross-Platform-Entwicklung. Wenn Du Cross-Plattform Frameworks vergleichst, nach welchen Kriterien gehst Du dabei vor?

Hallo Toni, ich freue mich auch demnächst ein paar spannende Trainings durchführen zu können! Eins der wichtigsten Kriterien für Cross- und Multiplatform Frameworks ist natürlich der mögliche Anteil an plattformunabhängigem Code. Im besten Fall lassen sich so Geschäftslogik und UI umsetzen. Das UI sollte hochwertig und flüssig umgesetzt werden können, im besten Fall ist der Unterschied zu nativen Apps nicht oder kaum zu merken. Außerdem sollte ein möglichst umfangreicher Zugriff auf gerätespezifische Funktionen und z.B. die Sensorik gegeben sein. Wo dies nicht durch das Framework oder Bibliotheken umgesetzt ist, erwarte ich eine Möglichkeit selbst plattformspezifischen Code schreiben zu können. Schließlich sollte auch ein professionellen Ansprüchen genügendes Testing und Debugging möglich sein.

Beim nächsten öffentlichen Training am 19. September geht es um Flutter, das Multiplattform Mobile Framework von Google. Flutter wurde 2015 angekündigt, im Dezember 2018 erfolgte nun das erste offizielle Release. Worin unterscheidet sich Flutter von existierenden Frameworks wie Xamarin, React Native, Cordova, Gluon, DukeScript…?

Meines Erachtens verbindet Flutter viele Vorteile der konkurrierenden Frameworks. Spannendster Punkt ist vielleicht, dass Flutter-Projekte Just in time und Ahead of time kompiliert werden können. Während der Entwicklung wird Just in time kompiliert und schnelle Feedbackzyklen sind möglich. Die ausgelieferte App ist dann Ahead of time kompiliert und läuft sehr effizient. Auch bezüglich der UI-Entwicklung wurde ein neuer Weg eingeschlagen. Die UI-Elemente sind von den nativen Elementen kaum zu unterscheiden, damit sind wie bei Xamarin und React Native nativ „aussehende“ Apps möglich. Dennoch ist die Flexibilität viel höher und durch das komplett eigene Rendering ist beispielsweise der Umgang mit Assets einfacher. Die von Flutter gebotene Kombination aus effizientem und schnellem Code, hochwertigem und flexiblem UI und bei Bedarf vollem Zugriff auf plattformspezifischen Code bietet m.E. keins der konkurrierenden Frameworks.

Flutter-Anwendungen werden mit Dart entwickelt. Wie schwer wäre es für eine Java-Entwickler wie mich, die Grundlagen von Dart zu erlernen und damit produktiv zu arbeiten? Ist das Training für Java Entwickler geeignet, oder sollte man bereits Erfahrung mit Dart mitbringen?

Seit dem Release von Dart 2 sind die Unterschiede zu Java gar nicht mehr so groß. Dart ist seitdem typsicher und als objektorientierte, moderne Programmiersprache gut zu erlernen. Zudem bietet es beispielsweise Funktionen höherer Ordnung und angenehme Asynchronitätskonzepte. Für das Training wird keine Dart-Erfahrung vorausgesetzt. Nicht nur Java-Entwickler, sondern Entwickler mit Kenntnissen in einer beliebigen objektorientierten Programmiersprache sollten ohne Probleme teilnehmen können.

Flutter nutzt die Skia rendering Pipeline und setzt, anders als Xamarin oder React Native, auf eigene Widget-Bibliotheken. Der native Look wird dann auf iOS mit den „Cupertino“ Widgets imitiert. Wie nativ fühlen sich solche Widgets an? Merkt man den Unterschied, z.B. in der Scrollgeschwindigkeit oder der Responsiveness von Controls?

In der Tat ist das mögliche Aussehen der App mit Xamarin und React Native vergleichbar, anders als diese sind die Widgets bei Flutter aber auf Basis von Skia „nachgebaut“. Man wird immer Experten finden, die den Unterschied „sehen“ können, so wie auch immer Vinyl besser als CD klingt ;) Meines Erachtens sind die Unterschiede kaum erkennbar und ich bin bisher noch nicht an Grenzen gestoßen. Für mich fühlen sich die Widgets nativ an.

Illustration Flutter Apps auf Tablet und Mobiltelefon

Android und iOS unterscheiden sich auch in der Navigationsmustern voneinander. Unter iOS gibt es zum Beispiel keinen Universal Navigation Bar und Gesten wie das Swiping von rechts nach links sind anders belegt. Wie geht Flutter damit um?

Anders als beispielsweise Xamarin geht Flutter „out of the box“ zunächst mal von einer UI für beide Plattform aus. Google bewirbt Material Design ja schon länger als plattformübergreifende Designsprache, was aus Sicht von iOS-Entwicklern allerdings eine Mogelpackung ist. Flutter bietet hier aber viele Freiheiten: es kann ein gemeinsames UI für beide Plattformen gefunden werden, aber es können auch einigermaßen leicht plattformindividuelle Unterschiede umgesetzt werden. Frameworks wie Xamarin gehen hier konsequenter den Weg jeder Plattform ihre möglichst eigene Bedienwelt zu lassen. Andererseits ist Flutter aber flexibler, durch die eigene Rendering Pipeline ist halt „alles“ möglich.

Wie funktioniert der Zugriff auf native Dienste wie Bluetooth? Gibt es da bereits APIs um zum Beispiel mit Bluetooth Low Energy mit einem Beacon zu interagieren?

Es gibt einige eingebaute Möglichkeiten für native Dienste und über den Paketmanager Pub auch ein wachsendes Angebot an Bibliotheken der Community für solche Zwecke. Dort ist beispielsweise BLE vertreten. Sollte etwas noch nicht als Bibliothek vorhanden sein, kann man plattformspezifischen Code schreiben.

Während in klassischen Android Apps Ressourcen und Views hauptsächlich deklarativ angelegt werden, setzt Flutter auf DART-Code um Widgets anzulegen und zu stylen. Ist das nicht ein Rückschritt gegenüber Frameworks, die Styling und oft sogar Layout und Binding deklarativ erledigen?

Gute Frage, das habe ich anfangs auch so empfunden. Mit der Zeit habe ich meine Meinung aber korrigieren müssen. Wichtig ist hier zum Einen das Just in time Compiling während der Entwicklung. Hot Reload funktioniert bei Flutter ziemlich gut, d.h. es ist möglich Änderungen am UI-Code beinahe augenblicklich in der fertigen App sehen zu können. Damit fällt ein gewichtiger Vorteil deklarativem UI-Codes weg. Durch die Programmierung von Widgets im Code wird andererseits die Wiederverwendbarkeit verbessert, da wir die vollen Möglichkeiten der Objektorientierung haben. Schließlich kommt Flutter mit einem Codeformatter, der es schafft, den UI-Code ähnlich strukturiert aussehen zu lassen, wie bei deklarativem UI-Code. Insgesamt überzeugt mich die Lösung!

Wo siehst Du im Augenblick das größte Potential für Flutter? Für welche Arten von Anwendungen und für welche Entwickler und Unternehmen ist Flutter besonders gut geeignet?

Flutter ist natürlich noch vergleichsweise jung, daher werden wir wohl noch nicht so schnell Enterprise Apps in Flutter sehen. Vom Potential her sehe ich aber erstmal keine Beschränkung. Interessanterweise ist Flutter m.E. das erste Framework, das sowohl bei Webentwicklern wie auch bei nativen Entwicklern gut ankommt. Am Beginn ist es sicherlich interessant für Unternehmen, die iOS und Android bedienen wollen, aber nicht die Ressourcen für native Entwicklungen haben. Jeder, der bisher schon auf Frameworks wie die von Dir genannten Xamarin, React Native, Cordova, Gluon, DukeScript gesetzt hat oder setzen wollte, sollte sich Flutter angucken!

Vielen Dank für das Interview!

Passende Trainings

Entwicklung von Multiplatform Mobile Apps mit Flutter

Entwicklung von Multiplatform Mobile Apps mit Xamarin

DukeScript Workshop - moderne Guis mit java und HTML

Die Alternative zu Java: Kotlin für Android/Java-Entwickler