Flutter Tutorial

So geht plattformübergreifende App-Entwicklung

12.08.2022
Von 
Martin Heller schreibt als freier Autor für die Schwesterpublikation InfoWorld.
Flutter ist das richtige Werkzeug, um plattformübergreifende Mobile-, Desktop und Web-Apps zu entwickeln. Wir zeigen Ihnen, wie das abläuft.
Sie wollen eine Codebasis nutzen, um für diverse Plattformen zu entwickeln? Dann sind Sie bei Flutter richtig.
Sie wollen eine Codebasis nutzen, um für diverse Plattformen zu entwickeln? Dann sind Sie bei Flutter richtig.
Foto: flutter.dev

Es gab eine Zeit, in der sich Entwickler zwischen universellen, mobilen und nativen Apps entscheiden mussten. Erstere machten sich Web-Technologien wie HTML und JavaScript zunutze, die auf mobilen Endgeräten aber oft suboptimal funktionierten. Letztgenannte schnitten besser ab, weil sie für jede zu unterstützende Plattform separat geschrieben wurden. Das trieb aber auch den Aufwand und die Kosten für die Entwicklung in die Höhe.

Das von Google entwickelte Open-Source-Framework Flutter hat dieses Szenario geändert: Heute stehen Entwicklern mehr Optionen zur Verfügung, um performante, mobile Applikationen zu erstellen, die auf mehreren Plattformen laufen - etwa Ionic, React Native und Xamarin. Flutter und dessen integrierte Programmiersprache Dart sind bereits sehr populär und weit verbreitet. Flutter 3, das Anfang 2022 veröffentlicht wurde, bietet Support für alle wichtigen Plattformen und enthält zudem Performance-Optimierungen, um eine unterbrechungsfreie User Experience zu gewährleisten.

Multi-Plattform-Entwicklung mit Flutter

Flutter ermöglicht Ihnen, nativ kompilierte, plattformübergreifende Anwendungen aus einer einzigen Codebasis zu erstellen. Flutter 3 unterstützt sechs Plattformziele:

  • Android,

  • iOS,

  • Windows,

  • macOS,

  • Linux und

  • Webanwendungen.

Flutter-Widgets werden mit einem modernen, von React inspirierten Framework erstellt. Wie in Abbildung 1 zu sehen, kommen am häufigsten Text-Widgets, Flexbox-Zeilen- und Spaltenlayouts sowie Stack-Layouts mit absoluter Positionierung, positionierte Widgets und Container-Widgets zum Einsatz.

Abbildung 1: Flutter Material Widget mit DartPad in einem Webbrowser. Der Dart-Code befindet sich auf der linken Seite und die Webanzeige auf der rechten Seite.
Abbildung 1: Flutter Material Widget mit DartPad in einem Webbrowser. Der Dart-Code befindet sich auf der linken Seite und die Webanzeige auf der rechten Seite.
Foto: IDG

Nehmen wir an, Sie bauen eine Multiplattform-Anwendung: Den Startpunkt bildet in diesem Fall das Flutter MaterialApp-Widget. Dieses Widget erstellt verschiedene andere nützliche Widgets im Root-Verzeichnis Ihrer Anwendung, einschließlich eines Navigators. Dieser verwaltet einen Stapel von Widgets, die durch Strings identifiziert werden (in Flutter als "routes" bezeichnet). Mit Hilfe des Navigators können Sie reibungslos zwischen den App-Screens hin und her wechseln.

Um ein iOS-zentrisches Design zu erstellen, werfen Sie einen Blick auf das Cupertino-Komponentenpaket. Das Flutter-Team empfiehlt, dieses Paket, ausschließlich für iOS-Apps zu verwenden. Für Multiplattform-Apps empfehlen sich andere Widget-Sets, beispielsweise Material Design.

Die folgenden Screenshots zeigen Stateless Widgets, Gestensteuerung und Stateful Widgets. Dabei lohnt es sich, das gesamte Flutter-Entwicklungs-Tutorial zu durchlaufen, beginnend mit dem Widgets Intro. In diesem Zuge sollten Sie auch einen Blick auf DartPad Samples, Flutter Gallery und Flutter Codelabs werfen.

Neben Widgets und Layouts bietet Flutter auch:

  • Navigation und Routing,

  • Animationen,

  • Actions und Intents,

  • Shortcuts,

  • State Management,

  • Networking und HTTP,

  • JSON-Serialisierung und

  • Firebase-Integration.

Abbildung 2: Ein Beispiel für die Gestensteuerung in Flutter. Die onTap-Methode des (Stateless) GestureDetector-Widgets, das mit der Schaltfläche Engage verbunden ist, wird ausgelöst, wenn die Schaltfläche gedrückt wird.
Abbildung 2: Ein Beispiel für die Gestensteuerung in Flutter. Die onTap-Methode des (Stateless) GestureDetector-Widgets, das mit der Schaltfläche Engage verbunden ist, wird ausgelöst, wenn die Schaltfläche gedrückt wird.
Foto: IDG
Abbildung 3: Ein Beispiel für ein zustandsabhängiges (Stateful) Widget.
Abbildung 3: Ein Beispiel für ein zustandsabhängiges (Stateful) Widget.
Foto: IDG

Flutter und Dart

Flutter wird von der Programmiersprache Dart angetrieben, die für schnelle Anwendungen auf jeder Plattform optimiert ist. Dart sieht ähnlich aus wie Java, Kotlin, Swift und TypeScript (siehe Abbildung 4). Wenn Sie objektorientierte Sprachen verstehen, werden Sie keine Probleme damit haben, sich schnell in Dart einzuarbeiten. Auch hierzu gibt es einen empfehlenswerten Überblick.

Ein sehr einfaches Programm auf Dart-Basis könnte zum Beispiel wie folgt aussehen:

// Define a function.

void printInteger(int aNumber) {

print('The number is $aNumber.'); // Print to console.

}

// This is where the app starts executing.

void main() {

var number = 42; // Declare and initialize a variable.

printInteger(number); // Call a function.

}

Dart ist stark typisiert, aber Typ-Annotationen sind optional, da Dart Typen ableiten kann. var und Typinferenz zu verwenden, ist der bevorzugte Stil für lokale Variablen, für Funktionen und Public-Variablen empfiehlt sich eine starke Typisierung. Im Gegensatz zu Java sind die Keywords public, protected und private in Dart nicht vorhanden. Beginnt ein Identifier mit einem Unterstrich (_), ist er für seine Library privat.

Dart kann in ARM- und x64-Maschinencode für Mobile-, Desktop- und Backend-Applikationen sowie in JavaScript für das Web kompiliert werden. Im Debug-Modus können Sie mit Dart laufende Anwendungen laden, nachdem Sie Änderungen am Quellcode gespeichert haben. Dart verfügt sowohl über JIT- (Just-in-Time) als auch AOT (Ahead-of-Time) -Compiler.

Optional bietet die Programmiersprache auch Null Safety: Wenn Ihre minimale SDK-Beschränkung (im pubspec.yaml-File Ihrer Anwendung) mindestens 2.12.0 ist, haben Sie der Null Safety zugestimmt. In diesem Fall dürfen nur Variablen mit einem Typ gefolgt von einem Fragezeichen (beispeilsweise int?) Nullen enthalten.

Abbildung 4: Dart im Vergleich mit Kotlin, Swift und TypeScript.
Abbildung 4: Dart im Vergleich mit Kotlin, Swift und TypeScript.
Foto: IDG

Flutter 3 mit neuen Funktionen und Upgrades

Tim Sneath, Produktmanager für Flutter und Dart bei Google, fasst im Rahmen eines Blog-Posts die neuen Funktionen von Flutter 3 zusammen. Dabei konstatiert er, dass "Flutter 3 die Roadmap von einem mobil-zentrierten zu einem Multiplattform-Framework vervollständigt."

Flutter 3:

  • erweitert die verfügbaren Plattformziele um Support für macOS und Linux-Desktop-Apps,

  • integriert Flutter vollständig in Firebase,

  • fügt native Entwicklungsunterstützung für Apple Silicon hinzu und

  • enthält zahlreiche Produktivitäts- und Leistungsfunktionen.

Der Flutter Showcase ist im Wesentlichen eine Sammlung von Case Studies zu Produktionsanwendungen, die mit Flutter entwickelt wurden. Sie ist vor allem für Manager nützlich, die den Einsatz von Flutter in Erwägung ziehen.

Die Flutter Gallery enthält eine Sammlung von Widgets, Verhaltensmustern und Vignetten, die zeigen, wie Flutter funktioniert und ist für Entwickler und Designer nützlich. Sie können die Galerie im Web betrachten oder sie lokal auf einer der unterstützten Plattformen ausführen (über das entsprechende Repository).

Flutter installieren

Sie können Flutter auf Windows, macOS, Linux oder Chrome OS installieren. Wie das im Einzelnen abläuft, hängt vom jeweiligen System ab. Sie haben die Wahl:

  • entweder eine systemspezifische .zip-Datei herunterzuladen und zu entpacken

  • oder das Repository zu klonen.

Anschließend müssen Sie das flutter-Tool zu Ihrem Pfad hinzufügen und flutter doctor ausführen. Im Folgenden sehen Sie den Output von flutter doctor:

Running "flutter pub get" in flutter_tools... 5.1s

Doctor summary (to see all details, run flutter doctor -v):

[?] Flutter (Channel stable, 3.0.1, on Mac OS X 10.15.7 19H1922 darwin-x64,

locale en-US)

[?] Android toolchain - develop for Android devices

Install Android Studio from:

https://developer.android.com/studio/index.html

components.

(or visit https://flutter.dev/docs/get-started/install/macos#android-setup

for detailed instructions).

If the Android SDK has been installed to a custom location, please use

`flutter config --android-sdk` to update to that location.

[!] Xcode - develop for iOS and macOS (Xcode 12.4)

Download the latest version or update via the Mac App Store.

CocoaPods is used to retrieve the iOS and macOS platform side's plugin

code that responds to your plugin usage on the Dart side.

Without CocoaPods, plugins will not work on iOS or macOS.

For more info, see https://flutter.dev/platform-plugins

To install see

https://guides.cocoapods.org/using/getting-started.html#installation for

instructions.

[?] Chrome - develop for the web

[!] Android Studio (not installed)

[?] IntelliJ IDEA Ultimate Edition (version 2022.1.1)

[?] IntelliJ IDEA Ultimate Edition (version 2022.1.1)

[?] VS Code (version 1.67.1)

[?] Connected device (2 available)

[?] HTTP Host Availability

Sie können im Output erkennen, dass das verwendete Intel MacBook Pro zu alt ist, um Xcode (erforderlich für iOS- und macOS-Entwicklung mit Flutter) zu unterstützen. Flutter benötigt mindestens Xcode 13, um universelle Intel/M1 macOS-Binärdateien zu erstellen. Man kann für Android entwickeln, indem die Android SDK Toolchain installiert wird. Das Flutter-Plugins zu Visual Studio Code hinzuzufügen nimmt weniger als eine Minute in Anspruch.

Flutter 3 ist ein interessanter Benchmark, der Stabilität auf sechs Plattformen bietet und weiterhin auf Performance-Optimierungen fokussiert. Für Entwickler, die plattformübergreifende Anwendungen erstellen müssen, ist das Entwicklungs-Tool eine Überlegung wert. (fm)

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.