Update (21.01.2019): Einen detaillierteren Vergleich der beiden Frameworks findet ihr hier: Flutter vs. React Native für App-Entwicklung
Wer sich mit App-Entwicklung beschäftigt, steht schnell vor der Frage, ob man eine native App entwickelt oder ein Cross-Platform-Framework benutzt.
Lange Zeit war native Entwicklung die einzige Möglichkeit der App-Entwicklung. Bei der nativen Entwicklung nutzt man die offiziellen Programmierschnittstellen (API) von Android bzw. iOS. Man erhält also die maximale Kontrolle über das System und idealerweise auch die beste Performance.
Später kamen Cross-Platform-Frameworks wie Xamarin und Cordova hinzu. Diese Werkzeuge bieten ihre eigene API, die sie dann im Hintergrund in native Systemaufrufe umsetzen. So erhält der Entwickler die Möglichkeit, seinen Code auf mehreren Plattformen nutzen zu können.
Native App-Entwicklung ist der Horror
Zwar bietet native Entwicklung die maximale Kontrolle und theoretisch auch die größte Flexibilität; jedoch zeigt sich in der Praxis, dass die APIs und Architektur von Android oftmals suboptimal sind. Selbst einfachste Aufgaben, wie das Darstellen einer Liste, erfordern teils über 100 Zeilen Java-Code und nochmal 20 Zeilen XML. Ein nicht-triviales Projekt wächst schnell zu tausenden Zeilen heran. Es erklärt sich von selbst, dass ein solches Projekt nur schwer zu warten ist.
Hinzu kommen architekturelle Entscheidungen, die einfach nur frustrierend sind, wie zum Beispiel der hochkomplexe Activity und Fragment Lifecycle.
Zwar ist die iOS-API etwas angenehmer, aber auch hier ist man weit entfernt von einer optimalen Entwicklungserfahrung.
React Native
Facebook erschuf als Reaktion auf dieses Problem ein Framework namens React Native. Hiermit ist es möglich, Apps in einem extrem kompakten und deklarativen Stil zu entwickeln, ohne auf natives Look-And-Feel zu verzichten.
Die Entwicklung findet in JavaScript statt, wodurch Web-Entwicklern der Einstieg erleichtert wird und es außerdem möglich ist, bestehende JavaScript-Komponenten von einer Webanwendung zum größten Teil zu übernehmen.
Desweiteren bietet sich so die Möglichkeit sowohl die App, als auch den Server in der selben Programmiersprache zu schreiben und damit Daten einfach austauschen zu können.
Flutter
Google ließ es sich nicht nehmen, ebenfalls ein neues Framework zu entwerfen, das die App-Entwicklung vereinfachen soll: Flutter.
Im Gegensatz zu React Native nutzt Flutter nicht die nativen Widgets des Betriebssystems, sondern zeichnet sie selbst. Man versucht jedoch, die System-Widgets möglichst detailgetreu zu kopieren, so dass sich für den normalen Nutzer hier kein sichtbarer Unterschied ergibt.
Der Grund für diese Architektur liegt darin, dass Flutter somit das komplette Rendern übernimmt und das Betriebssystem umgehen kann. Hiermit ergibt sich eine exzellente Performance.
Flutter vs. React Native
React Native und Flutter überschneiden sich in vielen Punkten, so dass es schwer sein kann, sich zu entscheiden. Im Folgenden wollen wir die wichtigsten Unterschiede stichpunktartig darstellen:
- Flutter ist besser für komplexe Animationen, da der gesamte Render-Vorgang in Flutter abläuft. React Native hingegen kann Animationen entweder in Javascript ausführen, wobei sie oft ruckelig wirken; oder in nativem Code, was aber mehr Aufwand ist.
- Flutter nutzt Dart als Programmiersprache, React Native nutzt Javascript. Zusätzlich lässt sich React Native auch mit Typescript verwenden, was gerade bei größeren Projekten vorteilhaft ist.
Wer bisher in Java, C# oder C++ gearbeitet hat, dürfte sich bei Dart wohlfühlen. Wer mit PHP, Python oder Ruby vertraut ist, wird JavaScript wahrscheinlich eher mögen. - React Native hat eine größere Community, die Widgets erstellt. Allerdings liefert Flutter von Haus aus gleich deutlich mehr Widgets mit.
- React Native erlaubt das teilweise Wiederverwenden von Code aus Webprojekten, die auf React basieren.
Letztendlich ist es auch durchaus möglich, beide Frameworks zu erlernen. Auf konzeptioneller Ebene sind sie sich sehr ähnlich, so dass man mit bestehender React Native-Erfahrung sehr schnell den Einstieg in Flutter finden kann, oder umgekehrt.
Rückschlag durch Airbnb?
Vor kurzem verkündete das Startup Airbnb, dass sie in Zukunft auf React Native verzichten und wieder auf native Entwicklung setzen werden. Ist dies ein Argument gegen React Native?
Nein. Zuerst handelt es sich bei Airbnb um ein Projekt mit großem Entwicklerteam. Es geht ihnen also nicht darum, das beste Ergebnis mit möglichst wenig Aufwand zu erreichen, sondern darum, das generell beste Nutzererlebnis zu erschaffen, auch wenn es einen hohen Aufwand erfordert.
Außerdem sind die meisten der genannten Kritikpunkte keine fundamentalen Schwächen von React Native, sondern eher von dessen Neuheit. Es ist klar, dass React Native in den nächsten Jahren weiter verbessert werden wird und die meisten Schwächen ausgeräumt werden dürften.
Andere Cross-Platform-Frameworks
Wie anfangs erwähnt, gibt es noch weitere Cross-Platform-Frameworks: Xamarin, Cordova, Nativescript, etc.
Was React Native und Flutter hiervon abhebt, ist das Konzept des „Virtual DOM“: Traditionell ist man als Entwickler dafür verantwortlich, nach jeder Nutzer-Aktion zu entscheiden, welche grafischen Komponenten aktualisiert werden müssen.
Dies kann jedoch bei komplexen Apps sehr aufwändig werden und zieht Fehler magisch an. In React Native und Flutter jedoch entfällt dieser Aufwand. Als Entwickler legt man lediglich einmalig fest, wie aus dem Applikationszustand die grafische Oberfläche berechnet werden soll.
Ändert sich der Zustand, ermittelt React Native bzw. Flutter automatisch die notwendigen Änderungen an der Oberfläche.
Außerdem haben React Native und Flutter den Vorteil, dass sie von Großkonzernen gestützt sind, wobei dies auch für Xamarin gilt, welches von Microsoft betreut wird.
Fazit
React Native und Flutter werden die App-Entwicklung in den nächsten Jahren revolutionieren. Gerade wenn man sich ein passives Einkommen aufbauen will, geht es darum, mit möglichst wenig Aufwand eine möglichst gute App erstellen zu können.
Beide Frameworks sind noch sehr jung und dementsprechend gibt es wenige Bücher oder Lernmaterialien. Wir empfehlen dir, einfach mal in beiden Frameworks eine simple App zu bauen und zu schauen, welche Arbeitsweise dir mehr zusagt.