Diese Notizen sind nicht aktuell und größere Teile passen nicht mehr zum Quelltext. Sie sind als archiviert zu betrachten.
Wichtig: Damit der Google Play Pre-Launch Report keine Fehler hat, wurde die Fehlerbehebung aus diesem Flutter-Issue umgesetzt. Beim Updaten beachten!
Soll zur Organisation meiner BeLL-Arbeit dienen. Zu jedem dieser Punkte gibt es noch mehr Notizen weiter unten.
- Designing
- Navigationssystem
- Essensplan
- Kepler-News-System
- Daten-Speicherung
- Startseite
- Benachrichtigungen
- Kepler-Stundenplan
- LernSax
- FFJKG
- Einstellungen
- Flutter unterstüzt Material 3! → sieht modern aus, erfordert keine weitere Arbeit
- MaterialApp Design hat
useMaterial3: true
- Drawer-Items ähnlich zu Material 3-
NavigationDrawer
gestaltet- gute Übersichtlichkeit
- angenehme Farben und Größe
- auch Meinungen von Freunden und Familie eingeholt
- Dark Mode hinzugefügt, kann ohne Neustart smooth geändert werden (wird von Flutter direkt unterstützt,
ColorScheme.brightness
)- wird von allen Widgets unterstützt
- im News-Browser umsetzen?
- Kepler-Farbpalette sollte mehr verwendet werden
- Design ist nicht allzu interessant, dafür sehr modern:
- mehr Farben verwenden! -> "unterhaltsamer" anzuschauen
- weniger runde Kanden? andere Formen?
- ursprüngliche Entscheidung: Material3 NavigationDrawers
- aber: Items nehmen sehr viel Platz weg
- CustomDesign nicht (einfach) möglich?
- Verschachtelung von Drawer-Items nicht möglich
- größtes Problem:
- viele nötige Elemente, meine beste Lösungsidee: verschachtelte Drawer-Items
- allerdings: keine gute Implementation dafür gefunden?
- Lösung:
- also eigenes System dafür entwickelt, erlaubt komplette Bearbeitbarkeit (siehe
drawer.dart
) - Design ähnlich wie Mat3 NavDrawers, aber kompakter und mit Möglichkeit für
children
- erlaubt jetzt auch verschiedene Aktionen in der Navigationsleiste pro Page
- auch Überprüfungsfunktionen, ob Öffnen/Aufklappen möglich ist -> für StuPlan Erst-Datenerfassung
- Einträge können auch:
- ausgeblendet werden, z.B. Lehrerplan für Schüler - damit muss ich nicht das Array der Entries bei Runtime bearbeiten, sondern zeige einfach bestimmte Einträge daraus nicht an
- gesperrt werden, z.B. um nicht angemeldeten Benutzern zu zeigen, was sie durch Anmeldung freischalten, und damit sie sich einfacher anmelden können
- also eigenes System dafür entwickelt, erlaubt komplette Bearbeitbarkeit (siehe
- eigentlich: Bestellung und Abfrage per API direkt integrieren
- aber: DLS erlaubte mir das (auf Anfrage) nicht
- deshalb: Webseite-Link und Knopf, um die App zu installieren oder öffnen
- Plan: nochmal anfragen, Unterstützung von Schulleiter ausdrücken; anbieten, die offizielle Dart-Library vom Eigentümer vom Dienstleister der DLS zu benutzen
- kepler-chemnitz.de Wordpress-Post-API ist gesperrt (
kepler-chemnitz.de/wp-json/wp/v2/posts
) - deshalb verwende ich den RSS/Atom-Feed (auf
kepler-chemnitz.de/?feed=atom
zu finden, paginated mit URL-Argument paged), um die Posts zu erfassen - für genauere Ansichten des Artikels:
- öffnet echte Post-URL in Custom WebView
- Footer/Header werden durch JS entfernt
- TODO: wenn möglich, Zugriff auf die API bekommen, um Posts besser anzuzeigen (eher nicht, da Einbettung in die App die Sperre unnötig machen würde)
- News auch offline anzeigen:
- News-Data in Cache als JSON (siehe NewsEntryData)
NewsEntries
werden daraus generiert- Offline-Anzeige von News nicht möglich, da echter Inhalt (HTML) nicht gecached werden kann
- siehe Benachrichtigungen
- News-"Widget" zur Homepage hinzugefügt
- App lädt neue News beim Öffnen der App
- neueste 3 News sichtbar auf App-Homepage
- Datenabfrage:
- eigene Schnittstelle plus Modelle für Indiware-API geschrieben:
indiware.dart
- zusätzlich Management von Caching für alle Daten ->
IndiwareDataManager
ausht_data.dart
- alles wird gecached, Daten älter als 3 Tage werden beim Start gelöscht
Klassen.xml
(Plan-Datei, die nur für allgemeine Infos genutzt wird) wird nach 30 Tagen erneuert (Änderungszeitpunkt vor mehr als 30 Tagen
)
- eigene Schnittstelle plus Modelle für Indiware-API geschrieben:
- Anmeldedaten werden bei Anmeldung von LernSax abgefragt
- wenn das scheitert, wird Benutzer gefragt
- mehr Infos: siehe
lernsax_data/info.md
- Abfrage von Klasse/Lehrer und Kursen (bei Klasse):
- je nach Benutzertyp (Lehrer oder Schüler/Eltern)
- beim ersten Öffnen (Nichtvorhandensein von ausgewählten Daten)
- InfoScreen mit Abfrage von Klasse/Lehrer
- bei Schüler/Eltern: Abfrage der Kurse der Klasse -> zur Filterung der Anzeige
- "Dein/Ihr Stundenplan":
- auf Basis der ausgewählten Daten Anzeige der Unterrichtsstunden
- nicht anpassbar -> zeigt immer Daten von
plan.kepler-chemnitz.de
an (wie alle Datenansichten)
- Lehrerpläne (nur für Lehrer angezeigt):
- verwendet Indiware-Daten für Lehrer
- wie Klassenpläne, nur für alle Lehrer
- Klassenpläne:
- wie eigener Stundenplan, nur für beliebige Klasse (ignoriert ausgewählte Kurse)
- speichert zuletzt ausgewählte Klasse (auch für Lehrer- und Raumpläne)
- Alle Vertretungen:
- ähnlich wie Anzeige an TV in Schule
- zeigt nur
VPLesson
s mit Änderungen oder Infos
- Freie Räume:
- durch Fokussierung auf JKG gut umsetzbar -> Liste von Raum-Codes hardcoded (muss halt nach dem Gebäudeupdate aktualisiert werden)
- erlaubt bessere Bestimmung der freien Räume
- erlaubt Kategorisierung und schönere + übersichtlichere Anzeige der Räume für den Benutzer (später konfigurierbar)
- Raumpläne:
- aus Raumliste und Unterrichtsdaten abgeleitet
- dadurch nicht 100 % zuverlässig
- gerade für Räume mit seperater Liste für Verwendung (z.B. Aula) nicht anwendbar -> werden nicht mit angezeigt
- Anzeige:
- allgemeine Biblothek mit Widgets für Stundenplan-Darstellung, mithilfe der Datenmodelle von
indiware.dart
- Extra-Infos per Dialog beim Antippen eines Eintrages
- hat mir persönlich gefehlt
- zeigt, wenn möglich, über
VPSubject.subjectID
mehr Infos zum Fach + Lehrer, bei dem in der entsprechenden Stunde eigentlich Unterricht gewesen wäre, an - kurze, knappe Übersicht über die Daten zu einer Unterrichtsstunde im Vertretungsplan
- gleiche Basis sorgt für gleiches, einheitliches Design zum Tagauswählen und zur Darstellung der Stunden für alle Daten
- allgemeine Biblothek mit Widgets für Stundenplan-Darstellung, mithilfe der Datenmodelle von
- alle Daten werden nur aus Schüler- bzw. Lehrerplandaten abgeleitet -> können teilweise unzuverlässig sein, aber dadurch keine extra Komplexität durch Abfragen von anderen Daten
- damit können auch Schüler auf Raumpläne (und theoretisch auch einfache Lehrerpläne [tatsächliche Implementierung ausstehend?]) zugreifen
- Fach bei "Aufgaben auf LernSax erledigen" automatisch als ausgefallen markieren (wenn
Lehrer == ""
)? -> scheint immer zu passen
- Datenschutz:
- sollte kein Problem sein
- da keine neuen Server benötigt werden sollen -> keine neue Datenspeicherung
- Anmeldedaten werden nur lokal in der App gespeichert
- Anmeldedaten sollen bei jedem Start der App überprüft werden
- Stundenplan-Auth-Daten für Schüler sollen von Lernsax abgefragt werden
- Rolle bestimmen:
- Anmeldungsablauf:
- Mit LernSax anmelden
- Zugehörigkeit zu Johannes-Kepler-Gymnasium prüfen
- Wenn LernSax-Mail auf .eltern, .vati, .mutti, .tante oder .grosseltern endet: Eltern
- Mit Stundenplan-Daten anmelden
- Wenn Daten Zugriff auf Lehrerplan geben: Lehrer
- Wenn Daten Zugriff auf Schülerplan geben: Schüler
- damit werden Rollen bestimmt
- -> könnte durch automatische Abfrage von LernSax durch evtl. Lehrergruppe (wenn Mitglied = Lehrer) und allgemeine Institution mit Datei mit Indiware-Auth-Daten vereinfacht werden
- Problem: Stundenplan-Anmeldedaten werden nicht ungültig
- Lösung: da LernSax-Anmeldung auch überprüft wird, werden diese dann zur Überprüfung verwendet
- Anmeldungsablauf:
- wenn kein Internet: Rolle als verifiziert ansehen, aber zur Änderung (und zum ersten Login) ist Internet nötig
- API-Dokumentation ist öffentlich (siehe lernsax.de/wws/api.php)
- Antworten sind komplett undokumentiert
- Art der Anfrage ist komplett undokumentiert
- keine Beispiele
- nach Anfrage: erklärende PDF erhalten -> JSON-RPC-Schnittstelle (
https://www.lernsax.de/jsonrpc.php
(www.
ist wichtig!))
- Anmeldung:
- API-Methode
login
verwenden - dann neue Anwendung registrieren
- Schlüssel davon speichern
- damit wird nicht das Passwort gespeichert, sondern nur der Anwendungs-Anmelde-Schlüssel
- Sicherheit ist damit gewährleistet.
- API-Methode
- Verwendung:
- Tasks in der App einsichtbar machen
- Übersicht für Mails hinzufügen
- Nachrichtenboard anschauen
- wenn möglich: Übersicht für neue Dateien hinzufügen
- für andere Funktionen, wie Dateien: auf LernSax-Messenger App verlinken
- aus jedem wichtigen Tab wird ein "Widget" zur Startseite hinzugefügt
- Reihenfolge und Sichtbarkeit soll anpassbar sein
- spezielles Widget für Stundenplan:
- zeigt nur aktuelle Vertretungen für heutigen Tag (Info bei Wochenende)
- mit "Link" zu eigentlichem Stundenplan
- Unterstützung eigentlich garantiert, Absprache bei Stammtisch
- Bereitstellung eines Macs zu teuer -> iPhone vielleicht über Schule erhältlich, Mac wird virtuell simuliert
- Problem: Verbindung von iPhone?
- Modus für zukünftige Eltern (-> ohne LernSax-Login) muss noch verbessert werden
- Farbschema auswählbar (auch Systemschema)
- Logins ändern (Problem: App muss neugestartet werden, damit Daten ordentlich geladen werden)
- Stundenplanzeugs ändern (auch als Navbar-Aktion)
- Ideen für Einstellungen:
Farbschema ändern✅- blauen Rahmen für Stundenplan anpassbar, vielleicht als Gradient
eigenen Hintergrund für App/Stundenplan-Views(erstmal nicht, wäre sowieso kaum sichtbar)- Elemente der Navigation versteckbar machen
- Reihenfolge + Sichtbarkeit der Widgets auf dem Home-Screen anpassbar machen
- Benachrichtigungs-Kontrolle (welche, für was)
- anpassbares App-Icon (mit
dynamic_flutter_icon
?) - Special Effects / "Lustiges":
- Konfetti für Vertretungen in eigenem Plan / auf StuPlan-Widget
- Lustige Sounds beim Antippen von manchen Knöpfen
- Startup-Sound
- für News:
- bevorzugt hätte ich Firebase-Push-Notifications verwendet - aber: das erfordert Integration mit WordPress (und erfordert Firebase-Projekt -> Datenschutz-Frage)
- da das nicht möglich ist, muss App regelmäßig neue Artikel abfragen -> Pull-Prinzip
- nicht so toll, aber nicht so schlimm, dass anderes nötig ist
Workmanager
zum Erstellen eines Tasks verwenden- iOS-Kompatibilität fragwürdig!
- damit wird alle 2 Stunden auf neue News überprüft
- falls neue News verfügbar: Benachrichtigung wird gesendet (siehe
sendNotification
intasks.dart
, verwendet API vonnotifications.dart
)- Benachrichtigungen scheinen aktuell iOS gar nicht zu unterstützen
- erfordern extra Berechtigungen auf Android 13+ -> werden aktuell nicht angefragt
- bevorzugt hätte ich Firebase-Push-Notifications verwendet - aber: das erfordert Integration mit WordPress (und erfordert Firebase-Projekt -> Datenschutz-Frage)
- für Stundenplan-Änderungen:
- neue Idee
- ähnliche Umsetzung wie News-Benachrichtigungen
- für LernSax-Benachrichtigungen:
- nicht wirklich nötig
- LernSax Messenger kann das schon, und eigentlich besser
- ich glaube halt einfach mal nicht, dass je
einzwei Lehrer oder Eltern die App verwenden werden- Stats/Analytics dazu wären nice, aber wohl kaum datenschutztechnisch vertretbar (bzw. erfordert Hintergrundserver)
- aber der Gedanke zählt xD