Pretty JSON and extended Webuntis Error Handling
This commit is contained in:
		@@ -90,6 +90,7 @@ class _AppState extends State<App> {
 | 
			
		||||
              const Icon(Icons.chat),
 | 
			
		||||
              Consumer<ChatListProps>(
 | 
			
		||||
                builder: (context, value, child) {
 | 
			
		||||
                  if(value.primaryLoading()) return const SizedBox.shrink();
 | 
			
		||||
                  int messages = value.getRoomsResponse.data.map((e) => e.unreadMessages).reduce((a, b) => a+b);
 | 
			
		||||
                  return Visibility(
 | 
			
		||||
                    visible: messages > 0,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
 | 
			
		||||
import 'package:flutter/cupertino.dart';
 | 
			
		||||
import 'package:collection/collection.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:jiffy/jiffy.dart';
 | 
			
		||||
import 'package:marianum_mobile/api/webuntis/queries/getHolidays/getHolidaysResponse.dart';
 | 
			
		||||
import 'package:marianum_mobile/screen/settings/debug/jsonViewer.dart';
 | 
			
		||||
import 'package:timetable_view/timetable_view.dart';
 | 
			
		||||
 | 
			
		||||
import '../../../api/webuntis/queries/getHolidays/getHolidays.dart';
 | 
			
		||||
@@ -80,6 +82,20 @@ class _WeekViewState extends State<WeekView> {
 | 
			
		||||
                    ListTile(
 | 
			
		||||
                      leading: const Icon(Icons.people),
 | 
			
		||||
                      title: Text("Klasse(n): ${timetableData.kl.map((e) => e['name']).join(", ")}"),
 | 
			
		||||
                    ),
 | 
			
		||||
                    ListTile(
 | 
			
		||||
                      leading: const Icon(Icons.bug_report_outlined),
 | 
			
		||||
                      title: const Text("Webuntis Rohdaten zeigen"),
 | 
			
		||||
                      onTap: () => showDialog(context: context, builder: (context) {
 | 
			
		||||
                        return AlertDialog(
 | 
			
		||||
                          scrollable: true,
 | 
			
		||||
                          title: const Text("Rohdaten"),
 | 
			
		||||
                          content: Text(JsonViewer.format(timetableData.toJson())),
 | 
			
		||||
                          actions: [
 | 
			
		||||
                            TextButton(onPressed: () => Navigator.of(context).pop(), child: const SingleChildScrollView(child: Text("Schließen")))
 | 
			
		||||
                          ],
 | 
			
		||||
                        );
 | 
			
		||||
                      }),
 | 
			
		||||
                    )
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
@@ -142,8 +158,9 @@ class _WeekViewState extends State<WeekView> {
 | 
			
		||||
      //Every Day
 | 
			
		||||
 | 
			
		||||
      List<TableEvent> events = List<TableEvent>.generate(
 | 
			
		||||
          timetable.result.where((element) => element.date == day).length, (index) {
 | 
			
		||||
            GetTimetableResponseObject tableEvent = timetable.result.where((element) => element.date == day).elementAt(index);
 | 
			
		||||
        timetable.result.where((element) => element.date == day).length, (index) {
 | 
			
		||||
          GetTimetableResponseObject tableEvent = timetable.result.where((element) => element.date == day).elementAt(index);
 | 
			
		||||
          try {
 | 
			
		||||
            GetSubjectsResponseObject subject = subjects.result.firstWhere((subject) => subject.id == tableEvent.su[0]['id']);
 | 
			
		||||
 | 
			
		||||
            return TableEvent(
 | 
			
		||||
@@ -158,9 +175,12 @@ class _WeekViewState extends State<WeekView> {
 | 
			
		||||
                currentDay.add(Duration(hours: parseTime(tableEvent.startTime).hour, minutes: parseTime(tableEvent.startTime).minute)),
 | 
			
		||||
                currentDay.add(Duration(hours: parseTime(tableEvent.endTime).hour, minutes: parseTime(tableEvent.endTime).minute)),
 | 
			
		||||
              ),
 | 
			
		||||
              location: "\n${rooms.result.firstWhere((room) => room.id == tableEvent.ro[0]['id']).name} - ${tableEvent.te[0]['longname']} (${tableEvent.te[0]['name']})",
 | 
			
		||||
              location: "\n${rooms.result.firstWhereOrNull((room) => room.id == tableEvent.ro[0]['id'])?.name ?? "?"} - ${tableEvent.te[0]['longname']} (${tableEvent.te[0]['name']})",
 | 
			
		||||
            );
 | 
			
		||||
          } on Error {
 | 
			
		||||
            return TableEvent(title: "Unbekannt", eventId: index, laneIndex: day, startTime: parseTime(tableEvent.startTime), endTime: parseTime(tableEvent.endTime));
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      //Timepointer
 | 
			
		||||
@@ -176,10 +196,10 @@ class _WeekViewState extends State<WeekView> {
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      laneEvents.add(
 | 
			
		||||
        LaneEvents(
 | 
			
		||||
          lane: currentLane,
 | 
			
		||||
          events: events
 | 
			
		||||
        )
 | 
			
		||||
          LaneEvents(
 | 
			
		||||
              lane: currentLane,
 | 
			
		||||
              events: events
 | 
			
		||||
          )
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -238,7 +258,7 @@ class CustomTableStyle extends TimetableStyle {
 | 
			
		||||
  @override
 | 
			
		||||
  double get timeItemHeight => MediaQuery.of(context).size.width > 1000 ? 60 : 90;
 | 
			
		||||
  @override
 | 
			
		||||
  double get timeItemWidth => 50;
 | 
			
		||||
  double get timeItemWidth => 40;
 | 
			
		||||
  @override
 | 
			
		||||
  double get laneHeight => 40;
 | 
			
		||||
  @override
 | 
			
		||||
 
 | 
			
		||||
@@ -59,16 +59,14 @@ class _DebugOverviewState extends State<DebugOverview> {
 | 
			
		||||
                    itemCount: files.length,
 | 
			
		||||
                    itemBuilder: (context, index) {
 | 
			
		||||
                      String filename = files[index].split("/").last;
 | 
			
		||||
                      //String data = getValue(index).toString().replaceAll("{", "{\n    ").replaceAll("[", "[\n    ").replaceAll(",", ",\n    ");
 | 
			
		||||
                      String data = getValue(index).toString();
 | 
			
		||||
 | 
			
		||||
                      return ListTile(
 | 
			
		||||
                        leading: const Icon(Icons.text_snippet_outlined),
 | 
			
		||||
                        title: Text("(${data.length} z) [$filename] ${Jiffy.unixFromMillisecondsSinceEpoch(getValue(index)['lastupdate']).fromNow()}"),
 | 
			
		||||
                        title: Text("(${getValue(index).toString().length} z) [$filename] ${Jiffy.unixFromMillisecondsSinceEpoch(getValue(index)['lastupdate']).fromNow()}"),
 | 
			
		||||
                        textColor: Colors.black,
 | 
			
		||||
                        onTap: () {
 | 
			
		||||
                          Navigator.push(context, MaterialPageRoute(builder: (context) {
 | 
			
		||||
                            return JsonViewer(title: filename, data: data);
 | 
			
		||||
                            return JsonViewer(title: filename, data: getValue(index));
 | 
			
		||||
                          },));
 | 
			
		||||
                        },
 | 
			
		||||
                      );
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,9 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:pretty_json/pretty_json.dart';
 | 
			
		||||
 | 
			
		||||
class JsonViewer extends StatelessWidget {
 | 
			
		||||
  String title;
 | 
			
		||||
  String data;
 | 
			
		||||
  Map<String, dynamic> data;
 | 
			
		||||
 | 
			
		||||
  JsonViewer({Key? key, required this.title, required this.data}) : super(key: key);
 | 
			
		||||
 | 
			
		||||
@@ -14,8 +15,13 @@ class JsonViewer extends StatelessWidget {
 | 
			
		||||
      ),
 | 
			
		||||
      body: SingleChildScrollView(
 | 
			
		||||
        scrollDirection: Axis.vertical,
 | 
			
		||||
        child: Text(data.replaceAllMapped(RegExp(r'[{,}]'), (match) => "${match.group(0)}\n    ")),
 | 
			
		||||
        child: Text(format(data)),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  static String format(Map<String, dynamic> jsonInput) {
 | 
			
		||||
    return prettyJson(jsonInput, indent: 2);
 | 
			
		||||
    //return jsonInput.replaceAllMapped(RegExp(r'[{,}]'), (match) => "${match.group(0)}\n    ");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user