mobile development with Flutter

Der Markt für mobile Entwicklung gewinnt in den letzten Jahren rasant an Fahrt. Im Jahr 2019 wird erwartet, dass er 2,5 Milliarden Nutzer und mehr als 80 Milliarden Dollar abdecken wird, mit der Aussicht auf weiteres Wachstum. Allmählich haben sich drei Schlüsselbereiche herausgebildet: die Entwicklung für Android, iOS und plattformübergreifende Lösungen, die die weitere Marktentwicklung bestimmen. Letztere entstanden als eine Möglichkeit, schnell Anwendungen für beide dominierenden Plattformen zu erstellen, wobei die Leistungsfähigkeit der nativen Entwicklung geopfert wurde. Die bekanntesten Lösungen in diesem Bereich waren PhoneGap von Adobe, Xamarin von Microsoft und React Native von Facebook. Im Jahr 2017 trat Google mit der Einführung seines Flutter-Frameworks auf der jährlichen Google I/O-Konferenz der Gruppe bei. Im Dezember 2018 wurde die stabile Version von Flutter veröffentlicht, die es von einem experimentellen SDK zu einem voll funktionsfähigen Werkzeug für die kommerzielle Entwicklung machte.

Jedes Werkzeug hat jedoch seine eigenen Stärken und Schwächen. Deren Verständnis ist äußerst notwendig, um die richtige Wahl zu treffen und das optimale Kosten-Ergebnis-Verhältnis zu erzielen.

Die Vorteile der Verwendung von Flutter zur Erstellung mobiler Apps

1.Kostenlos und Open Source

Das SDK erfordert keine Lizenzkosten und bietet eine vollständige Palette von Möglichkeiten, fehlende Funktionalitäten zum Projekt-Repository hinzuzufügen: https://github.com/flutter/flutter.

2.Entwicklungszeit sparen mit einem plattformübergreifenden Ansatz

Wie alle anderen Werkzeuge für hybride und plattformübergreifende Entwicklung ermöglicht Flutter die gleichzeitige Entwicklung für beide mobilen Systeme, wodurch die gesamte Entwicklungszeit verkürzt und das Erscheinen neuer Versionen der Anwendung für Android und iOS synchronisiert wird.

3.Integrierte Grafikbibliothek

Flutter verwendet Skia, eine eingebaute Bibliothek für das Rendering. Dies macht es plattformunabhängiger. Das SDK bietet eine reiche Sammlung von Widgets, insbesondere die Material- und Cupertino-Kollektionen für das Rendering von nativen Widgets für Android und iOS. Durch die Kombination verschiedener Widgets haben Sie die Möglichkeit, ein komplexes UI zu erstellen. Dank der eigenen Bibliothek sehen Flutter-Anwendungen auf verschiedenen Versionen von Betriebssystemen gleich aus. Somit wird eines der Hauptprobleme der heutigen mobilen Entwicklung gelöst – die große Variabilität der mobilen Geräte.

In diesem Beispiel erstellen wir einen Floating Action Button mit Symbol und Text.

Zusätzlich zur vorhersehbaren Benutzeroberfläche erhalten Sie auch eine produktivere Anwendung. Hybride Anwendungen (wie PhoneGap oder Ionic) verwenden WebView für das Rendering von Grafiken, was eine schreckliche Leistung hat und sich vom nativen Look unterscheidet. React Native basiert auf der Umwandlung von Brücken seiner Widgets in native Widgets. Dies erhöht die Belastung der Ressourcen des Geräts und kann auch Renderprobleme verursachen. Skia garantiert das korrekte Verhalten der Benutzeroberfläche.

4.Hot Reload

Ein Nachteil von kompilierten Sprachen gegenüber Skriptsprachen ist der Zeitverlust beim Erstellen eines Projekts. Bei häufigen Änderungen kann dies einen erheblichen Teil der Arbeitszeit in Anspruch nehmen. Die Flutter-Hot-Reload-Funktion ermöglicht es Ihnen, die Auswirkungen Ihrer Änderungen im Code sofort anzuzeigen.

5.Starke Community

Natürlich ist eine der größten Stärken des SDK die schnell wachsende Community. Dank der Bemühungen von Google und Enthusiasten verfügt Flutter über gut strukturierte Dokumentation und Beispiele für die Umsetzung der Hauptaufgaben der mobilen Entwicklung. Die wichtigsten Plattformen für den Erfahrungsaustausch sind auf der Ressource https://flutter.dev/community.

6.Entwicklungsaussichten für Fuchsia OS

Flutter ist derzeit das einzige Tool zur Erstellung von Anwendungen für das Fuchsia-Betriebssystem von Google. Seit einigen Jahren weckt das neue Betriebssystem das Interesse der Entwickler und Fragen zu seinem Zweck. Besonders leidenschaftliche Fans nennen es den “Android-Killer”, der die Grenze zwischen mobiler, Desktop- und Web-Entwicklung verwischen soll. Bei Google selbst wird das neue Betriebssystem zurückhaltender bewertet – als Testgelände für neue Ideen und Experimente. Dennoch wird mit der weiteren Entwicklung von Fuchsia die Entwicklungserfahrung mit Flutter es ermöglichen, schnell eine neue Nische auf dem Softwareentwicklungsmarkt zu erschließen.

Gleichzeitig können die Mängel von Flutter nicht ignoriert werden.

Die Nachteile der Verwendung von Flutter zur Erstellung mobiler Apps

1.Einstiegshürde

Die Entwicklungssprache für Flutter ist Dart, eine von Google als Alternative zu JavaScript entwickelte Sprache, die von Entwicklern selten verwendet wird. Laut dem TIOBE-Index vom August 2019 belegt sie den 46. Platz der beliebtesten Programmiersprachen, weit hinter den in der mobilen Entwicklung am häufigsten verwendeten Sprachen Java, Swift und JavaScript. Das Erlernen einer neuen Sprache erfordert Zeit. In Bezug auf die Syntax ist Dart Java ähnlich, weist jedoch auch eine Reihe von Unterschieden auf. Zum Beispiel vergleichen Sie 2 Klassen, die in diesen Sprachen implementiert sind.

Java

Dart

Mit der allgemeinen Ähnlichkeit von Syntax und Logik des Codeaufbaus gibt es Unterschiede: Deklaration privater Variablen, automatische Initialisierung von Feldern, Pfeilnotation (=>) zur Deklaration eines Klassenmitglieds. Unterschiede werden noch deutlicher, wenn man mit Multithreading arbeitet.

Ein grundlegend anderer Ansatz von Flutter zur Architektur mobiler Anwendungen stellt eine große Herausforderung dar. In der nativen Entwicklung überwiegt ein imperativer Ansatz – Sie erstellen eine View, fügen sie dem übergeordneten Layout hinzu und steuern ihre Eigenschaften mit spezifischen Methoden und Attributen. Stattdessen wird ein deklarativer Ansatz basierend auf Widgets vorgeschlagen. Um die gewünschte Benutzeroberfläche zu erstellen, müssen Sie eine Kombination von Widgets mit bestimmten Eigenschaften auswählen. Widgets können den Typ der Komponente (Text, Bild, Fortschrittsbalken usw.), die Position auf dem Bildschirm, das Verhalten usw. beschreiben. Insgesamt bietet Flutter 14 Kategorien von Widgets, die spezifische Probleme lösen. Die am häufigsten verwendeten sind Animation und Bewegung (verschiedene Übergänge und Builder für Animationen), Assets, Bilder und Symbole, Async (Future- und Steam-Builder), Basic (Standardanwendungskomponenten, z.B. AppBar, Row, Column, Text), die oben genannten Cupertino und Material, Styling, Text usw. Mit ihrer Hilfe können Sie die meisten Aufgaben einer mobilen Anwendung umsetzen. Um jedoch eine mehr oder weniger komplexe Benutzeroberfläche zu erstellen, benötigen Sie ein solides Verständnis des deklarativen Ansatzes und der Eigenschaften verschiedener Widgets. Frühere Erfahrungen in der nativen Android- und iOS-Entwicklung sind eher hinderlich als hilfreich.

2.Begrenzter Satz an Werkzeugen und Bibliotheken

Flutter ist ein sehr junges SDK, das vor 2 Jahren auf dem Markt für mobile Entwicklung erschien. Neben der Bequemlichkeit und Eleganz der Umsetzung technischer Aufgaben ist die Verfügbarkeit von fertigen Lösungen für spezifische Funktionalitäten ein wesentliches Merkmal jedes Frameworks. Dies ermöglicht es, Entwicklungszeit zu sparen und nicht jedes Mal einen Farbwähler oder benutzerdefinierten Fortschrittsbalken neu zu erstellen. Die Ressource https://pub.dev/flutter/ bietet eine beträchtliche Anzahl von Paketen für die mobile Entwicklung mit Flutter. Sie ist jedoch in der Anzahl der verfügbaren Lösungen der nativen Entwicklung und React Native deutlich unterlegen. Dies bedeutet, dass Sie für eine mehr oder weniger spezifische Aufgabe Ihre eigene Lösung schreiben müssen.

Auch die geringe Verbreitung der Dart-Sprache hat Auswirkungen. Es gibt um Größenordnungen weniger Bibliotheken für die Arbeit mit z.B. Telefonnummern, Bildern oder Streams. Die Chancen, die richtige Bibliothek selbst zu schreiben, steigen erheblich und die Chancen, Entwicklungszeit zu sparen, verringern sich entsprechend.

3.Größere Installationsdatei

Für die Unabhängigkeit von nativen Widgets muss man einen Preis zahlen. Flutter ist gezwungen, eine Dart-VM zu jeder Anwendung hinzuzufügen, was die Größe der Installationsdatei erhöht. Bei der einfachsten HelloWorld-Anwendung sind das 4,7 MB. Zum Vergleich: Eine ähnliche native Android-Anwendung benötigt 540 KB. Im Bestreben, Speicherplatz zu sparen, verliert Flutter hoffnungslos gegen die native Entwicklung.

4.Schwache iOS-Unterstützung

Der Ursprung von Flutter bei Google hinterlässt Spuren in der Qualität der Unterstützung für mobile Betriebssysteme. Wenn die meisten SDK-Funktionen unter Android korrekt funktionieren, sieht die Situation bei iOS viel trauriger aus. Beispielsweise löscht die Anwendung beim Fotografieren auf Apple-Geräten alle EXIF-Daten. Dadurch wird das Foto in der falschen Ausrichtung angezeigt, ohne Standort, ohne Datum, ohne die richtige Gamma. Nahezu keine Unterstützung für iOS-Zugänglichkeitsfunktionen (VoiceOver, Guided Access, Untertitelung und Audiobeschreibungen) ist implementiert.

5.Fehlende Hot Pushes

Plattformübergreifende Lösungen wie React Native, Cordova und Ionic bieten einen Mechanismus zur schnellen Änderung der Anwendung nach der Veröffentlichung – Hot Updates oder Hot Pushes. Obwohl Flutters Entwicklungsfahrplan für 2019 die Einführung dieser Funktion vorsah, wurde die Arbeit derzeit ausgesetzt. Die Gründe waren die Unfähigkeit, schnelle Updates auf iOS sicherzustellen, das Potenzial für die Einführung bösartigen Codes und Probleme mit der Paketzustellung. Software-Updates sind nur auf traditionelle Weise möglich – durch die Veröffentlichung neuer Versionen im Google Play Store oder App Store.

6.Fehlende Unterstützung für Passwort-Manager

Einer der Nachteile der Verwendung eigener statt nativer Widgets ist das Auftreten von Problemen bei der Nutzung bestimmter Funktionen von Android und iOS. Derzeit haben Flutter-Anwendungen Probleme mit der automatischen Vervollständigung von Eingabefeldern. Dies ist besonders auffällig, wenn es notwendig ist, Passwörter aus eingebauten oder Drittanbieter-Passwortmanagern zu übernehmen. Dieses Problem wird ausführlich beschrieben (https://github.com/flutter/flutter/issues/13015), aber bisher nicht gelöst.

Abschließende Gedanken

Flutter ist ein neues und sehr vielversprechendes plattformübergreifendes SDK. Es berücksichtigt die positiven Erfahrungen, die mit früheren Lösungen, insbesondere React Native, gesammelt wurden. Zu seinen Stärken zählen natürlich die hohe Leistung, die relative Unabhängigkeit von nativen Widgets und die starke Unterstützung durch Google und Enthusiasten. Gleichzeitig kann man jedoch nicht sagen, dass es alle Aufgaben der mobilen Entwicklung ermöglicht. Die Liste der ungelösten Probleme ist sehr umfangreich und umfasst mehr als 7.000 Punkte. Der nächstgelegene Konkurrent, React Native, hat wesentlich weniger – etwa 600 Fragen. Die kurze Existenzperiode von Flutter wirkt sich ebenfalls aus. In Bezug auf die Anzahl der Bibliotheken und Beispiele zur Problemlösung hinkt es anderen plattformübergreifenden Lösungen hinterher, ganz zu schweigen von der nativen Entwicklung für Android und iOS.

Was ist die aktuelle Nische von Flutter auf dem Markt für mobile Entwicklung? Es kann den größten Nutzen als Werkzeug für die Prototyperstellung von Anwendungen bringen, wenn es notwendig ist, ein Demo auf beiden mobilen Plattformen zur Präsentation vor Investoren zu erstellen. Im Produktionsbereich eignet es sich zur Erstellung einfachster Anwendungen, die keine großen funktionalen Anforderungen haben. Wenn die Entwicklungsgeschwindigkeit und -kosten der Schlüssel zur Anwendung sind und Sie bereit sind, Kompromisse bei der Benutzeroberfläche (UI) und Benutzererfahrung (UX) einzugehen, ist diese plattformübergreifende Lösung durchaus geeignet. Wie die Erfahrung zeigt, dominiert derzeit React Native diesen Nischenmarkt, aber Flutter kann gut mit ihm konkurrieren. Wenn Flutter seine aktuelle Entwicklungsdynamik beibehalten kann, Probleme mit der Unterstützung nativer Funktionen löst und die Möglichkeit hinzufügt, vollständig Desktop- und Webanwendungen zu entwickeln, könnte es möglicherweise das Nummer 1 SDK für plattformübergreifende Entwicklung werden.