Skip to Content
Mobile Apps4 - FlutterAufbau einer Flutter-App

Aufbau einer Flutter-App

Dauer: 20 Minuten

  • Projektstruktur
  • Einfache Flutter-App mit statischen Todos
  • FAB hinzufügen

Ziel: Grundprinzipien einer Flutter-App

Vorstellung des Frameworks

  • Installation und Einrichtung der Entwicklungsumgebung
  • Prinzipien des Frameworks (Projektstruktur, Komponenten/Widgets, …)
  • App mit einem Screen: UI-Elemente, Layout, Interaktion und State
  • Daten lokal speichern
  • Navigation zwischen mehreren Screens

Projektstruktur

Eine Flutter-App besteht aus verschiedenen Dateien und Ordnern, die die Struktur und den Aufbau der App definieren. Die wichtigsten Bestandteile sind:

  • lib/main.dart: Die Hauptdatei der App, in der die App-Klasse definiert wird.
  • lib/: Hier befinden sich die Dart-Dateien, deren Code die App-Logik und das UI definieren.
  • pubspec.yaml: Die Konfigurationsdatei der App, in der Abhängigkeiten und Ressourcen definiert werden.
  • android/, web/ usw.: Ordner mit spezifischen Dateien für die jeweiligen Plattformen.

Wir schreiben unseren eigenen Code hauptsächlich in Dart-Dateien im Ordner lib/. Zu Beginn werden wir uns auf die Datei lib/main.dart konzentrieren.

Einfache Flutter-App mit statischen Todos

Wir reduzieren zunächst den Code auf das Wesentliche, um die Struktur einer Flutter-App zu zeigen. main.dart kann auf folgenden Inhalt reduziert werden:

import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Todos', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), ), home: const MyHomePage(), ); } } class MyHomePage extends StatelessWidget { const MyHomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Todo-App')), body: const Column( children: [Text('Einkaufen'), Text('Kochen'), Text('Sport')], ), ); } }

Dies erzeugt eine einfache Flutter-App mit einer statischen Liste von Todos — ähnlich wie bei der zuvor entwickelten nativen Android-App.

Wir erkennen trotz syntaktischer Unterschiede zwischen Dart und Kotlin einige Ähnlichkeiten zur Todo-App, die wir als native Android-App mit Compose entwickelt haben:

  • ein Theme des Material Designs
  • „geschachtelte“ UI-Bestandteile (in Flutter Widgets genannt)
  • ein Scaffold mit AppBar
  • Column- und Text-Widgets für die Todo-Liste erinnern stark an die entsprechenden Composables zu Beginn der Android-App.

In Flutter arbeiten wir mit Dart-Klassen für Widgets während in nativer Android-Entwicklung mit Kotlin Funktionen für Composables verwendet werden. Auch in React Native werden Komponenten als Funktionen definiert.

Kleinere Änderungen wie die Farbe des Themes oder die Bezeichnungen der Todos sind einfach möglich.

Floating Action Button hinzufügen

Wir fügen unserer App einen Floating Action Button (FAB) hinzu:

class MyHomePage extends StatelessWidget { const MyHomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Todo-App')), body: const Column( children: [Text('Einkaufen'), Text('Kochen'), Text('Sport')], ), floatingActionButton: FloatingActionButton( onPressed: () => debugPrint('Todo hinzufügen'), tooltip: 'Todo hinzufügen', child: const Icon(Icons.add), ), ); } }

Auch dies sieht wieder sehr ähnlich aus wie bei der nativen Android-App. Auch dort haben wir den FAB im Scaffold definiert. Um die Ausgabe mit debugPrint zu sehen, müssen wir im Editor das Ausgabefenster öffnen.

Wir werden das Verhalten des FAB später ändern, um tatsächlich Todos hinzufügen zu können.