| 1 | import 'package:flutter_riverpod/flutter_riverpod.dart'; |
| 2 | |
| 3 | final messageSelectionModeProvider = |
| 4 | NotifierProvider<MessageSelectionModeNotifier, bool>( |
| 5 | MessageSelectionModeNotifier.new, |
| 6 | ); |
| 7 | |
| 8 | class MessageSelectionModeNotifier extends Notifier<bool> { |
| 9 | @override |
| 10 | bool build() => false; |
| 11 | |
| 12 | void enable() => state = true; |
| 13 | |
| 14 | void disable() { |
| 15 | state = false; |
| 16 | ref.read(selectedMessageIdsProvider.notifier).clear(); |
| 17 | } |
| 18 | } |
| 19 | |
| 20 | final selectedMessageIdsProvider = |
| 21 | NotifierProvider<SelectedMessageIdsNotifier, Set<String>>( |
| 22 | SelectedMessageIdsNotifier.new, |
| 23 | ); |
| 24 | |
| 25 | class SelectedMessageIdsNotifier extends Notifier<Set<String>> { |
| 26 | @override |
| 27 | Set<String> build() => const {}; |
| 28 | |
| 29 | void toggle(String id) { |
| 30 | final updated = {...state}; |
| 31 | if (!updated.remove(id)) updated.add(id); |
| 32 | state = updated; |
| 33 | } |
| 34 | |
| 35 | void clear() => state = const {}; |
| 36 | } |