import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:sepot/models/contact.dart'; import 'package:sepot/models/group.dart'; import 'package:sepot/providers/conversations_provider.dart'; import 'package:sepot/providers/messaging_provider.dart'; import 'package:sepot/providers/storage_provider.dart'; /// Stav skupin. Zápisové operace jdou přes /// MessagingService (fanout členům), tady se jen drží seznam pro UI. class GroupsNotifier extends AsyncNotifier> { @override Future> build() async { return ref.read(storageProvider).loadGroups(); } Future createGroup(String name, List members) async { final group = await ref.read(messagingServiceProvider).createGroup(name, members); await _refresh(); return group; } Future addMembers(Group group, List added) async { await ref.read(messagingServiceProvider).addGroupMembers(group, added); await _refresh(); } Future rename(Group group, String newName) async { await ref.read(messagingServiceProvider).renameGroup(group, newName); await _refresh(); } Future removeMember(Group group, String fingerprint) async { await ref .read(messagingServiceProvider) .removeGroupMember(group, fingerprint); await _refresh(); } Future setAdmin(Group group, String fingerprint, bool admin) async { await ref .read(messagingServiceProvider) .setGroupAdmin(group, fingerprint, admin); await _refresh(); } Future leave(Group group) async { await ref.read(messagingServiceProvider).leaveGroup(group); await _refresh(); } Future _refresh() async { state = AsyncData(await ref.read(storageProvider).loadGroups()); ref.invalidate(conversationsProvider); } } final groupsProvider = AsyncNotifierProvider>( GroupsNotifier.new, ); /// Jedna skupina podle id (null = id nepatří skupině → 1:1 konverzace). final groupProvider = FutureProvider.family((ref, id) async { // Závislost na seznamu — invalidace groupsProvider obnoví i family. ref.watch(groupsProvider); return ref.read(storageProvider).loadGroup(id); });