Skip to content

Instantly share code, notes, and snippets.

@mmm999
Last active June 27, 2025 00:01
Show Gist options
  • Save mmm999/4b6e2730f4bcccd1fc892e89e5583cd2 to your computer and use it in GitHub Desktop.
Save mmm999/4b6e2730f4bcccd1fc892e89e5583cd2 to your computer and use it in GitHub Desktop.
Abschlussaufgabe Lösung
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class Anwesendheit {
final String id;
final String name;
bool completed;
// Baue Standardkonstruktor für die 3 Attribute
// Anwesendheit(this.id, this.name, this.completed);
factory Anwesendheit.fromJson(Map<String, dynamic> json) {
return Anwesendheit(
json['id'] as String,
json['name'] as String,
json['completed'] as bool,
);
}
}
// erzeuge main, die mittels runApp deine App auruft
// void main() => runApp(AnwesendheitApp());
class AnwesendheitApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: AnwList());
}
}
class AnwList extends StatefulWidget {
@override
_AnwListState createState() => _AnwListState();
}
class _AnwListState extends State<AnwList> {
late Future<List<Anwesendheit>> futurePersons;
String uri = 'https://6655ef303c1d3b60293ba68d.mockapi.io/todo';
@override
void initState() {
super.initState();
futurePersons = fetchPersons();
}
Future<List<Anwesendheit>> fetchPersons() async {
final response = // http.get aufrufen um Daten zu holen
// await http.get(Uri.parse(uri));
if (response.statusCode == /* Nummer für korrekte Connection */ /*200*/ ) {
final List<dynamic> jsonData = json.decode(response.body);
final first20 = jsonData.take(20);
return first20.map((item) => Anwesendheit.fromJson(item)).toList();
} else {
throw Exception('Fehler beim Laden der ToDos');
}
}
Future<void> updatePersons(Anwesendheit person) async {
final url = Uri.parse('${uri}/${person.id}');
final headers = {'Content-type': 'application/json; charset=UTF-8'};
final jsonPerson = json.encode({'completed': person.completed});
final response = await http.put(url, headers: headers, body: jsonPerson);
if (response.statusCode == 200) {
// gib auf der Konsole die id der Person aus und die Mitteilung, dass alles erfolgreich upgadatet
//print('Person updated successfully ${person.id}');
} else {
print('Failed to update Person. Status code: ${response.statusCode}');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Anwesendheitsliste')),
body: FutureBuilder<List<Anwesendheit>>(
future: // hier das Objekt, das die zukünftigen Daten enthält // futurePersons,
builder: (context, snapshot) {
if (/*snapshot.hasData*/ /*wenn snapshot Daten hat*/) {
final persons = snapshot.data!;
return ListView.builder(
itemCount: persons.length,
itemBuilder: (context, index) {
final person = persons[index];
return ListTile(
title: Text(/*person.name*/ /*Name der Person*/),
leading: IconButton(
icon: Icon(
person.completed
? Icons.check_circle
: Icons.circle_outlined,
color: /*person.completed ? Colors.green : Colors.red,*/ /*wenn completed dann Farbe gree ansosnten Farbe rot*/
),
onPressed: () async {
setState(() {
person.completed = !person.completed;
});
/*await updatePersons(person);*/ /*rufe die Funktion zum updaten der Personen, übergabe als Parameter person...die Funktion soll warten, bis Daten fertig übertragen*/
},
),
);
},
);
} else if (/*snapshot.hasError*/ /*wenn snapshot fehlerhaft*/) {
return Center(child: Text('Fehler: ${snapshot.error}'));
}
return Center(child: CircularProgressIndicator());
},
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment