Lektion 08 - Zwischenuebung Apps bauen
Apps planen, zerlegen und Schritt fuer Schritt bauen
Bevor du groessere Flutter-Aufgaben baust, trainierst du hier den Ablauf eines App-Projekts. Du lernst, eine App-Idee in Screens, Widgets, Daten, State und kleine Coding-Aufgaben zu zerlegen.
1. Der App-Bau-Ablauf
Eine App entsteht nicht aus einem einzigen grossen Codeblock. Du baust sie in kleinen Schritten: Idee verstehen, Oberflaeche planen, Daten definieren, Verhalten einbauen, testen und verbessern.
App bauen:
Idee beschreiben
Nutzer-Aktion festlegen
Screen grob zeichnen
Widgets bestimmen
Daten und State bestimmen
Erste Version bauen
Fehler pruefen
App verbessern
2. Uebung: App-Idee in Bausteine zerlegen
Waehle eine kleine App-Idee und zerlege sie in technische Bausteine. Noch nicht direkt coden — erst verstehen.
- Beschreibe die App in einem Satz.
- Notiere eine Hauptaktion, die User ausfuehren.
- Notiere, welche Daten gespeichert werden muessen.
- Notiere, welche Widgets du brauchst.
- Schreibe eine kurze Ablaufplanung fuer die App.
Beispiel: Lernkarten-App
Ziel:
User sehen eine Frage und koennen die Antwort aufdecken.
Daten:
question
answer
isAnswerVisible
Widgets:
Text fuer Frage
Button zum Aufdecken
Text fuer Antwort
Aktion:
Wenn Button gedrueckt wird:
isAnswerVisible umschalten
3. Uebung: Screen als Widget-Baum planen
Plane eine App-Oberflaeche als Widget-Baum. Das ist wie eine Strukturzeichnung fuer Flutter.
- Starte mit
MaterialApp. - Nutze
Scaffoldfuer die Seite. - Nutze
Columnfuer vertikale Anordnung. - Plane Text, Buttons und Abstaende.
MaterialApp
Scaffold
AppBar
Text('Lernkarten')
body
Padding
Column
Text('Frage')
SizedBox
Button('Antwort anzeigen')
Text('Antwort')
4. Uebung: Profilkarten-App bauen
Baue eine einfache Profilkarten-App. Ziel ist nicht Komplexitaet, sondern saubere Struktur.
- Erstelle ein neues Flutter-Projekt.
- Ersetze den Startinhalt durch eine Profilkarte.
- Nutze
Container,Padding,TextundSizedBox. - Lagere die Profilkarte in ein eigenes Widget aus.
- Uebergib Name, Rolle und Punkte als Parameter.
class ProfileCard extends StatelessWidget {
final String name;
final String role;
final int points;
const ProfileCard({
super.key,
required this.name,
required this.role,
required this.points,
});
@override
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
Text(name),
Text(role),
Text('$points Punkte'),
],
),
),
);
}
}
5. Uebung: Button-App mit State
Baue eine Mini-App, bei der ein Button einen Wert veraendert. Dadurch trainierst du
StatefulWidget und setState.
- Lege
int points = 0als State an. - Zeige Punkte als Text.
- Baue Button
+10 Punkte. - Nutze
setState, damit die UI neu gezeichnet wird. - Baue einen Reset-Button.
int points = 0;
void addPoints() {
setState(() {
points += 10;
});
}
void resetPoints() {
setState(() {
points = 0;
});
}
6. Uebung: Mini-Todo-App vorbereiten
Hier planst du eine Todo-App als Zwischenprojekt. Erst mit festen Daten, spaeter mit Eingabe.
- Erstelle eine Liste
tasks. - Zeige alle Tasks mit
ListView.builder. - Wenn die Liste leer ist, zeige einen Hinweistext.
- Fuege einen Button hinzu, der eine Testaufgabe einfuegt.
final List<String> tasks = [];
Widget buildTaskList() {
if (tasks.isEmpty) {
return const Text('Noch keine Aufgaben.');
}
return ListView.builder(
itemCount: tasks.length,
itemBuilder: (context, index) {
return Text(tasks[index]);
},
);
}
7. Uebung: Quiz-App planen
Plane eine Quiz-App mit Frage, Antwortmoeglichkeiten und Punktestand.
- Welche Daten braucht eine Frage?
- Welche Daten braucht die App als State?
- Was passiert beim Klick auf eine Antwort?
- Wann wird die naechste Frage angezeigt?
- Wann zeigt die App das Ergebnis?
class QuizQuestion {
final String question;
final List<String> answers;
final String correctAnswer;
const QuizQuestion({
required this.question,
required this.answers,
required this.correctAnswer,
});
}
8. Uebung: Fehleranzeige in einer App
Baue eine kleine Fehleranzeige: Wenn eine Eingabe leer ist, soll die App eine Meldung anzeigen.
- Lege
String errorMessage = ''an. - Wenn Eingabe leer ist, setze eine Fehlermeldung.
- Wenn Eingabe gueltig ist, leere die Fehlermeldung.
- Zeige die Meldung rot an, wenn sie nicht leer ist.
void validateName(String name) {
setState(() {
if (name.trim().isEmpty) {
errorMessage = 'Name darf nicht leer sein.';
} else {
errorMessage = '';
}
});
}
9. Uebung: Dateien sinnvoll aufteilen
Plane, wie du eine kleine App in Dateien zerlegst. Das ist wichtig, damit dein Code
nicht komplett in main.dart landet.
lib/
main.dart
models/
quiz_question.dart
learning_task.dart
screens/
home_screen.dart
quiz_screen.dart
widgets/
profile_card.dart
action_button.dart
- Lege fest, welche Datei der Einstiegspunkt ist.
- Lege fest, wo Datenklassen liegen.
- Lege fest, wo Screens liegen.
- Lege fest, wo wiederverwendbare Widgets liegen.
10. Zwischenprojekt: Lern-Dashboard-App
Baue als Zwischenprojekt eine kleine Lern-Dashboard-App. Sie muss noch nicht perfekt sein, aber sie soll echte App-Struktur trainieren.
- Startseite mit Titel und kurzer Begruessung.
- Karte mit aktuellem Kurs.
- Punkteanzeige.
- Button
+5 Punkte. - Button
Reset. - Liste mit drei Lernzielen.
- Eigene Widgets fuer Karte und Button.
- Kurze README mit Start-Command und Projektziel.
App-Planung:
Starte App
Zeige Lern-Dashboard
Zeige aktuellen Punktestand
Wenn +5 gedrueckt:
Erhoehe Punkte um 5
Wenn Reset gedrueckt:
Setze Punkte auf 0
Zeige Lernziele als Liste
Weiter zur Counter-App