Nach ca. 1400 Downloads im App und Play Store habe ich die App 'Cluster-Tagebuch' aus den jeweiligen Stores entfernt, da man als individual developer keine Covid-19 relevanten Apps veröffentlichen darf.
Die hinzugefügten Daten werden in einer lokalen SQLite Datenbank auf dem Smartphone gespeichert. Folgende Flutter Packages werden dazu verwendet:
Das Schema und die CRUD-Operationen sind im File sqflite_service.dart definiert.
Die Datenbank enthält folgende vier Tabellen:
-
clusters
In dieser Tabelle werden alle Cluster, die der Nutzer anlegt, abgespeichert.
id name ort anzahlpersonen datum 1 Mein erstes Cluster Eschweiler 8 012345678909 - id => PRIMARY KEY und AUTOINCREMENT;
- datum => Millisekunden seit Unix Epoch
-
Contacts
In dieser Tabelle werden alle Kontakte, die der Nutzer anlegt, abgespeichert.
id vorname nachname strasse ort plz telefonnummer adddatum 1 Peter Schmidt Haupstraße 10 Eschweiler 52249 01234567890 10987654321 - id => PRIMARY KEY und AUTOINCREMENT
- adddatum => Millisekunden seit Unix Epoch
-
qrontact
In dieser Tabelle werden die Kontaktdaten abgespeichert, die für die Erstellung des QR-Codes genutzt werden.
id vorname nachname strasse ort plz telefonnummer adddatum 1 Peter Schmidt Haupstraße 10 Eschweiler 52249 01234567890 10987654321 - id => Always 1
- adddatum => Millisekunden seit Unix Epoch
-
clusterhistory
Diese Tabelle dient als Junction-Table, um eine Relation zwischen Cluster und Kontakten zu ermöglichen.
id clusterID contactID 1 2 3 - id => PRIMARY KEY und AUTOINCREMENT
- clusterID => FOREIGN KEY REFERENCES clusters(id)
- contactID => FOREIGN KEY REFERENCES Contacts(id)
- Um alle Kontakte zu erhalten, die einem Cluster zugeordnet sind, wird folgende Query ausgeführt:
SELECT Contacts.* FROM Contacts INNER JOIN clusterhistory ON Contacts.id = clusterhistory.contactID WHERE
clusterhistory.clusterID = ? ORDER BY Contacts.nachname, [clusterID]);
- Um alle Cluster zu erhalten, die einem Kontakt zugeordnet sind, wird folgende Query ausgeführt:
SELECT clusters.* FROM clusters INNER JOIN clusterhistory ON clusters.id = clusterhistory.clusterID WHERE
clusterhistory.contactID = ? ORDER BY clusters.datum DESC, [contactID]);
- Um alle Kontakte zu erhalten, die einem Cluster zugeordnet und nicht älter als 14 Tage sind, wird folgende Query ausgeführt:
SELECT DISTINCT Contacts.* FROM Contacts INNER JOIN clusterhistory ON Contacts.id = clusterhistory.contactID INNER JOIN clusters ON clusterhistory.clusterID = clusters.id WHERE clusters.datum >= ? ORDER BY Contacts.nachname,
[DateTime.now().add(Duration(days: -days)).millisecondsSinceEpoch],);
Zur täglichen Benachrichtigung werden folgende Flutter Packages verwendet:
Zum Scannen und Erstellen von QR-Codes werden folgende zwei Flutter Packages verwendet:
Zum Öffnen von Links wird folgendes Flutter Package verwendet:
Zum Erstellen von Listen und zum Suchen werden folgende zwei Flutter Packages verwendet:
Zum Importieren von Kontakten aus dem Adressbuch werden folgende zwei Flutter Packages verwendet:
Zum Erstellen des PDF-Reports wird folgendes Flutter Package verwendet: