Lektion 06 - Gesamtuebungen
Speicher-Aufgaben mit JavaScript, Dart und Flutter
Jetzt kombinierst du alles: Objekte, Arrays, JSON-Text, localStorage,
Dart Models, toJson, fromJson und Flutter-Speicherung.
Die Aufgaben sind bewusst klein, damit du die Speicherlogik wirklich verstehst.
1. Aufgabe: Profil speichern
Erstelle ein Profil und speichere es als JSON im Browser. Danach lade es wieder und gib den Namen aus.
- Erstelle ein Objekt
profile. - Nutze die Felder
name,email,points. - Speichere es unter dem Schluessel
profile. - Lade es wieder und gib
profile.nameaus.
const profile = {
name: 'Mina',
email: 'mina@example.com',
points: 40,
};
localStorage.setItem('profile', JSON.stringify(profile));
const savedText = localStorage.getItem('profile');
const loadedProfile = JSON.parse(savedText);
console.log(loadedProfile.name);
2. Aufgabe: Aufgabenliste speichern
Eine Todo-Liste besteht aus mehreren Objekten. Jedes Objekt beschreibt eine Aufgabe. Speichere die Liste und lade sie wieder.
const tasks = [
{
title: 'JSON Grundlagen lernen',
isDone: true,
},
{
title: 'localStorage testen',
isDone: false,
},
];
localStorage.setItem('tasks', JSON.stringify(tasks));
const savedTasksText = localStorage.getItem('tasks');
const loadedTasks = JSON.parse(savedTasksText);
console.log(loadedTasks[0].title);
- Fuege eine dritte Aufgabe hinzu.
- Aendere
isDonebei der zweiten Aufgabe auftrue. - Speichere die geaenderte Liste erneut.
- Gib alle Titel mit einer Schleife aus.
3. Aufgabe: Lernfortschritt aktualisieren
Baue Funktionen, die Fortschritt speichern und Punkte erhoehen. Das ist ein realistischer Zwischenschritt fuer dein Coding-Lernsystem.
function loadUser() {
const savedText = localStorage.getItem('learningUser');
if (savedText === null) {
return {
name: 'Gast',
points: 0,
completedLessons: [],
};
}
return JSON.parse(savedText);
}
function saveUser(user) {
localStorage.setItem('learningUser', JSON.stringify(user));
}
function completeLesson(lessonId) {
const user = loadUser();
user.points = user.points + 10;
user.completedLessons.push(lessonId);
saveUser(user);
}
completeLesson('json-practice');
- Verhindere, dass dieselbe Lektion doppelt gespeichert wird.
- Gib nach dem Speichern die neuen Punkte aus.
- Baue eine Funktion
resetProgress(). - Erklaere, warum
loadUsereinen Standard-User zurueckgibt.
4. Aufgabe: Dart Model fuer JSON bauen
Jetzt baust du dieselbe Speicher-Idee in Dart. Ziel ist eine klare Model-Klasse, die sich in JSON umwandeln und aus JSON wieder herstellen kann.
- Erstelle eine Klasse
LearningTask. - Nutze die Felder
id,title,isDoneundpoints. - Schreibe einen Konstruktor mit
required. - Schreibe
Map<String, dynamic> toJson(). - Schreibe
factory LearningTask.fromJson(Map<String, dynamic> json). - Teste mit
jsonEncodeundjsonDecode.
class LearningTask {
final String id;
final String title;
final bool isDone;
final int points;
const LearningTask({
required this.id,
required this.title,
required this.isDone,
required this.points,
});
Map<String, dynamic> toJson() {
return {
'id': id,
'title': title,
'isDone': isDone,
'points': points,
};
}
}
5. Aufgabe: Flutter Storage-Service bauen
Erstelle eine eigene Storage-Klasse. Sie soll eine Liste von Aufgaben als JSON-Text speichern und wieder laden. Damit bleibt dein Widget-Code uebersichtlich.
- Installiere
shared_preferences. - Erstelle eine Klasse
TaskStorage. - Schreibe
saveTasks(List<LearningTask> tasks). - Schreibe
loadTasks(), das eine Liste zurueckgibt. - Wenn nichts gespeichert ist, gib eine leere Liste zurueck.
- Baue einen Button, der eine Aufgabe erledigt und danach speichert.
class TaskStorage {
static const String _key = 'learning_tasks';
Future<void> saveTasks(List<LearningTask> tasks) async {
final preferences = await SharedPreferences.getInstance();
final jsonList = tasks.map((task) => task.toJson()).toList();
final jsonText = jsonEncode(jsonList);
await preferences.setString(_key, jsonText);
}
}
6. Typische Fehler
JSON.parse(null)Vorher pruefen, ob gespeicherter Text existiert.JSON.stringify nutzen.7. Abschlussuebungen
- Baue eine kleine Notizenliste und speichere sie als JSON.
- Baue eine Kursliste mit Titel, Lektionen und Fortschritt.
- Baue eine Funktion
addPoints(amount). - Baue eine Funktion
markTaskDone(taskTitle). - Schreibe auf, welche Daten dein Lernsystem spaeter speichern soll.
- Erklaere den Unterschied zwischen JavaScript
localStorageund Fluttershared_preferences. - Zeichne den Datenfluss: Flutter Widget - Model - JSON - Speicher - JSON - Model - Widget.