diff --git a/lib/screen/pages/more/gradeAverages/gradeAverage.dart b/lib/screen/pages/more/gradeAverages/gradeAverage.dart new file mode 100644 index 0000000..05d8f00 --- /dev/null +++ b/lib/screen/pages/more/gradeAverages/gradeAverage.dart @@ -0,0 +1,142 @@ +import 'package:flutter/material.dart'; + +class GradeAverage extends StatefulWidget { + const GradeAverage({Key? key}) : super(key: key); + + @override + State createState() => _GradeAverageState(); +} + +class _GradeAverageState extends State { + double average = 0; + bool gradeSystem = true; + List grades = List.empty(growable: true); + + String getGradeDisplay(int grade) { + if(gradeSystem) { + return "Note $grade"; + } else { + return "$grade Punkt${grade > 1 ? "e" : ""}"; + } + } + + @override + Widget build(BuildContext context) { + if(grades.isNotEmpty) { + average = grades.reduce((a, b) => a + b) / grades.length; + } else { + average = 0; + } + + return Scaffold( + appBar: AppBar( + title: const Text("Notendurschnittsrechner"), + actions: [ + IconButton(onPressed: () { + showDialog(context: context, builder: (context) { + return AlertDialog( + title: const Text("Noten Zurücksetzen?"), + actions: [ + TextButton(onPressed: () { + Navigator.of(context).pop(); + }, child: const Text("Abbrechen")), + TextButton(onPressed: () { + grades.clear(); + setState(() {}); + Navigator.of(context).pop(); + }, child: const Text("Zurücksetzen")) + ], + ); + }); + }, icon: const Icon(Icons.delete_forever)), + PopupMenuButton( + enableFeedback: true, + initialValue: gradeSystem, + icon: const Icon(Icons.read_more), + itemBuilder: (context) => [true, false].map((e) => PopupMenuItem( + value: e, + enabled: e != gradeSystem, + child: Row( + children: [ + Text(e ? "Notensystem" : "Punktesystem"), + ], + ), + )).toList(), + + onSelected: (e) { + showDialog(context: context, builder: (context) { + return AlertDialog( + title: const Text("Notensystem wechseln"), + content: const Text("Beim wechsel des Notensystems werden alle Einträge zurückgesetzt."), + actions: [ + TextButton(onPressed: () { + Navigator.of(context).pop(); + }, child: const Text("Abbrechen")), + TextButton(onPressed: () { + setState(() { + grades.clear(); + gradeSystem = e; + }); + Navigator.of(context).pop(); + }, child: const Text("Fortfahren")), + ], + ); + }); + + }, + ), + ], + ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const SizedBox(height: 30), + Text(average.toStringAsFixed(2), style: const TextStyle(fontSize: 30, fontWeight: FontWeight.bold)), + const SizedBox(height: 10), + const Divider(), + const SizedBox(height: 10), + Expanded( + child: ListView.builder( + itemBuilder: (context, index) { + var grade = gradeSystem ? index + 1 : 14 - index + 1; + bool isThis(int e) => e == grade; + return ListTile( + tileColor: grade.isEven ? Colors.transparent : Colors.transparent.withAlpha(50), + title: Center( + child: Row( + children: [ + IconButton( + onPressed: () { + setState(() { + if(!grades.any(isThis)) return; + grades.removeAt(grades.indexWhere(isThis)); + }); + }, + icon: const Icon(Icons.remove), + color: Theme.of(context).colorScheme.onSurface, + ), + Text(getGradeDisplay(grade)), + IconButton( + onPressed: () { + setState(() { + grades.add(grade); + }); + }, + icon: const Icon(Icons.add), + color: Theme.of(context).colorScheme.onSurface, + ), + ], + ), + ), + trailing: Text("Anzahl: ${grades.where(isThis).length}"), + ); + }, + itemCount: gradeSystem ? 6 : 15, + ), + ), + ], + ), + ); + } +} diff --git a/lib/screen/pages/more/overhang.dart b/lib/screen/pages/more/overhang.dart index 9652d9c..c9e7178 100644 --- a/lib/screen/pages/more/overhang.dart +++ b/lib/screen/pages/more/overhang.dart @@ -1,11 +1,13 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:marianum_mobile/screen/pages/more/countdown/countdown.dart'; +import 'package:marianum_mobile/screen/pages/more/gradeAverages/gradeAverage.dart'; import 'package:marianum_mobile/screen/pages/more/roomplan/roomplan.dart'; import 'package:marianum_mobile/screen/settings/settings.dart'; import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart'; import '../../../widget/ListItem.dart'; -import 'debug/ThemeColors.dart'; import 'message/message.dart'; class Overhang extends StatelessWidget { @@ -21,12 +23,12 @@ class Overhang extends StatelessWidget { ], ), body: ListView( - children: [ + children: const [ ListItemNavigator(icon: Icons.newspaper, text: "Marianum Message", target: Message()), ListItemNavigator(icon: Icons.room, text: "Raumplan", target: Roomplan()), - ListItemNavigator(icon: Icons.calendar_month, text: "Schulferien", target: Roomplan()), - ListItemNavigator(icon: Icons.calculate, text: "Notendurschnitts rechner", target: Roomplan()), - ListItemNavigator(icon: Icons.color_lens_outlined, text: "Farbtest", target: ColorPreviewPage()) + ListItemNavigator(icon: Icons.calculate, text: "Notendurschnitts rechner", target: GradeAverage()), + if(!kReleaseMode) ListItemNavigator(icon: Icons.calendar_month, text: "Schulferien", target: Roomplan()), + if(!kReleaseMode) ListItemNavigator(icon: Icons.timer, text: "Countdown", target: Countdown()), ], ), );