Skip to content

NachtaktiverHalbaffe/eje

Repository files navigation

eje

App vom Evangelischen Jugendwerk Esslingen. Entwickelt mit Flutter als ehrenamtliches Nebenprojekt. Diese app startete parallel zu meiner Kartenspiele App und wurde Anfangs in Android geschrieben. Da die App aber auch für IOS veröffentlicht werden soll, wurde die App komplett in Flutter neu geschrieben. Diese App ruft Daten von einer REST-API ab, und benutzt einen Webscraper, um relevatnen Daten von der Website zu holen, für welche es keine saubere API gibt. Die App wurde über mehrere Jahre schubweise entwickelt, daher ist die Code-base nicht an allen Stellen konsistent.

Die README dient primär der eigenen Dokumentation.

Architektur

Die Architektur ist in 3 primäre Ebenen aufgeteilt: Data, Domain und Presentation.

Modell der Software-Architektur

Data-Layer

In Data gibt es 2 Datasources, eine Remote die Daten aus dem Internet holt und eine lokale Datenbank, die diese cached un für den Offline-Betrieb bereitstellt. Diese 2 Datasources werden von repositories vereint und stellt die Schnittstelle zwischen Daten- und Domainebene dar.

Domain-Layer

In der Domainebene werden die Daten aus dem Backend in den Repositories als Entitäten bereitgestellt. Über die Use-Cases können die Entitäten für verschiedene Anwendungsfälle aufgerufen werden.

Presentation Layer

In der Presentationebene wird das Statemanagment betrieben, die Logik für das Frontend behandelt und die Widgets gerendert. Diese Ebene stellt das typische Frontend dar

Module

Core

Error

  • exeption als Models für die verschiedene Arten von Fehlern im Data/Domain-Layer
  • failure als Models für die verschiedene Arten von Operationsfehlschlägen im Data/Domain-Layer

Platform

  • Reminder als Entität für das Speichern von Erinnerungen für push-notifications (Termine)
  • network_info als Methode zum herausfinden ob die App Verbindung zum Internet hat

Usecases

  • usecases als Template für usecases für die Architektur

Utils

  • first_startup um beim aller ersten starten der AppStandardwerte zu setzen
  • injection_container für Dependency Injection, um die losen Module der Architektur zu verbinden
  • WebScraper um Artikel von der Homepage webzuscrapen (breiter angelegte Online-Datenquelle)

Widgets

  • bloc für Statemanagment auf der obersten Ebene
  • Loadingindicator als universelle Ladeanmiation
  • DetailsPage für die Darstellung einzelner Seiten der Website oder Detaileinzeige einer page aus der App
  • Hyperlinksectiom für die Darstellung und das öffnen von Hyperlinks in DetailsPage
  • Prefimage als Widget für die darstellung von network images, die je nach Einstellung aus dem cache oder jedes mal aus den Internet geladen werden

Pages

Die Pages enthalten die einzelnen Menüpunkte und haben alle denselben Aufbau. Daher werden nur die einzelnen Menüpunkte un der generelle Aufbau gelistet

Pages

  • Articles: Bildet den Inhalt einer Seite der Homepage ab auf DetailsPage
  • Einstellungen: Appeinstellungen und rechtliche Angaben wie Datenschutz und Lizenzen
  • eje: Vorstellung der Arbeitsbereiche, des BAK/Vorstandes, der Hauptamtlichen und ausgewählten Services
  • freizeiten: Auflistung der Freizeiten, die im ejw-Manager öffentlich gelistet sind
  • instagram: Anzeigen der Website des eje-Instagrams, wird im Release nicht übernommen
  • neuigkeiten: Auflistung der neuesten news des eje
  • termine: Auflistung der Veranstaltungen des ejw-managers, die dort öffentlich gelistet werden

Generelle Aufbau

  • data: Wird aufgeteilt in Local-Datasource (Cache mithilfe von Hive) und Remote-Datasource(RSS-Feed, API des ejw-Managers oder WebScraping) und repository für die Zusammenführung
  • domain: Entities, die die Daten darstellen inklusive einer Error-Entity mit Minimaldaten, repositories die Entitäten generieren und verschiedene usecases um verschiedene Entitäten anzufragen (meistens eine Liste von Entitäten oder eine einzelne Entität)
  • presentation: Bloc für Statemanagment. Innerhalb von Bloc gibt es Bloc_Events für verschiedene Events, die ein State-wechsel verursachen, Bloc-STates für die verschiedene zustände der WIdgets und BLoc selber als Buisness Logic, welche festlegt welche Events welche States hervorrufen. Widgets sind frontend widgets für die Darstellung zuständig (UI)
  • außerhalb der packages ist immer ein übergeordnetes Widgets, was das oberstes WIdgets eines Menüpunktes darstellt und die verschiedenen unterwidgets eines Menüpunktes zusammenführt

Klassen

Widget-Tree

Benutzte Librarys