- ownerUid je Haushalt (Alt-Haushalte: erster memberUids-Eintrag = Ersteller); Besitzer-Anzeige in Mitglieder- und Haushaltsliste - Haushalt umbenennen (Dialog im Haushalts-Screen); Rules erlauben Clients am Haushalts-Dokument nur noch das Namensfeld - Cloud Functions leaveHousehold (selbst austreten, auch als Sitter) und removeMember (nur Besitzer); beide biegen den aktiven Zeiger des Betroffenen um und legen notfalls einen frischen eigenen Haushalt an - Haushalts-Wechsler im Drawer (PopupMenu, ab zwei Haushalten) - Tages-Checkliste und nächste Fälligkeit aggregieren über alle Haushalte, mit Zwischenüberschrift je Haushalt; Bestätigen schreibt in den Herkunfts-Haushalt der Aufgabe - Widget-Tests: Gruppierung, Besitzer-Rechte, Umbenennen Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57 lines
1.3 KiB
Dart
57 lines
1.3 KiB
Dart
import 'package:flutter/foundation.dart';
|
||
|
||
/// Rolle eines Haushalts-Mitglieds.
|
||
///
|
||
/// member = volle Rechte; sitter = Pflanzen-Sitter, darf Pläne sehen und
|
||
/// Aufgaben bestätigen, aber nichts anlegen, ändern oder löschen.
|
||
/// Die Durchsetzung passiert serverseitig in den Security Rules –
|
||
/// die UI blendet entsprechende Aktionen zusätzlich aus.
|
||
enum HouseholdRole { member, sitter }
|
||
|
||
@immutable
|
||
class HouseholdMember {
|
||
const HouseholdMember({
|
||
required this.uid,
|
||
required this.role,
|
||
required this.email,
|
||
});
|
||
|
||
final String uid;
|
||
final HouseholdRole role;
|
||
final String email;
|
||
}
|
||
|
||
@immutable
|
||
class Household {
|
||
const Household({
|
||
required this.id,
|
||
required this.name,
|
||
required this.ownerUid,
|
||
required this.members,
|
||
});
|
||
|
||
final String id;
|
||
final String name;
|
||
|
||
/// Besitzer = Ersteller des Haushalts. Nur er kann Mitglieder entfernen,
|
||
/// und er kann seinen Haushalt nicht verlassen.
|
||
final String ownerUid;
|
||
|
||
final List<HouseholdMember> members;
|
||
|
||
bool isOwner(String uid) => uid == ownerUid;
|
||
|
||
HouseholdRole roleOf(String uid) {
|
||
for (final member in members) {
|
||
if (member.uid == uid) return member.role;
|
||
}
|
||
return HouseholdRole.member;
|
||
}
|
||
|
||
HouseholdMember? memberByUid(String uid) {
|
||
for (final member in members) {
|
||
if (member.uid == uid) return member;
|
||
}
|
||
return null;
|
||
}
|
||
}
|