diff --git a/lib/helpers/extensions/build_event_options.dart b/lib/helpers/extensions/build_event_options.dart index a95da6d..5dbe541 100644 --- a/lib/helpers/extensions/build_event_options.dart +++ b/lib/helpers/extensions/build_event_options.dart @@ -27,17 +27,14 @@ extension BuildEventOptions on Event { final theme = Theme.of(context); final danger = theme.colorScheme.error; - final notifier = ref.read( - RoomChatController.provider((roomId, null)).notifier, - ); - final client = ref.read(ClientController.provider.notifier); + final notifier = RoomChatController.provider((roomId, null)).notifier; final isPinned = ref .watch(PinnedIdsController.provider(roomId)) .contains(eventId); Future sendReaction(String emoji) async { - await notifier.sendReaction(emoji, this).onError(showError); + await ref.watch(notifier).sendReaction(emoji, this).onError(showError); await ref .read(RecentEmojiController.provider.notifier) @@ -233,7 +230,8 @@ extension BuildEventOptions on Event { "Are you sure you want to delete this message? " "This cannot be reversed.", action: "Delete", - onConfirm: (reason) => notifier.deleteMessage(this, reason: reason), + onConfirm: (reason) => + ref.watch(notifier).deleteMessage(this, reason: reason), ), child: ListTile( leading: Icon(Icons.delete, color: danger), @@ -248,13 +246,15 @@ extension BuildEventOptions on Event { "Report this this to your server administrators, " "who can take action like banning this server or room.", action: "Report", - onConfirm: (reason) => client.reportEvent( - .new( - roomId: roomId, - eventId: eventId, - reason: reason.isEmpty ? null : reason, - ), - ), + onConfirm: (reason) => ref + .read(ClientController.provider.notifier) + .reportEvent( + .new( + roomId: roomId, + eventId: eventId, + reason: reason.isEmpty ? null : reason, + ), + ), ), child: ListTile( leading: Icon(Icons.report, color: danger), diff --git a/lib/widgets/reaction_row.dart b/lib/widgets/reaction_row.dart index 195aa4f..286646f 100644 --- a/lib/widgets/reaction_row.dart +++ b/lib/widgets/reaction_row.dart @@ -8,7 +8,6 @@ import "package:nexus/helpers/mxc_image.dart"; import "package:nexus/models/event.dart"; import "package:nexus/widgets/error_dialog.dart"; import "package:nexus/main.dart"; -import "package:fast_immutable_collections/fast_immutable_collections.dart"; class const ReactionRow(final Event event, {super.key}) extends ConsumerWidget { @override @@ -22,22 +21,20 @@ class const ReactionRow(final Event event, {super.key}) extends ConsumerWidget { .new(roomId: event.roomId, eventRowId: event.rowId), ), )) { - AsyncData(value: final IMap>? reactors) || - AsyncLoading(value: final reactors) => Wrap( + AsyncData(value: final reactions) || + AsyncLoading(value: final reactions?) => Wrap( spacing: 4, runSpacing: 4, - children: event.reactions - .where((_, value) => value != 0) + children: reactions + .where((_, value) => value.isNotEmpty) .mapTo( - (reaction, count) => HookBuilder( + (reaction, reactors) => HookBuilder( builder: (context) { final enabled = useState(true); - final selected = - reactors?[reaction]?.contains(clientState!.userId) ?? - false; + final selected = reactors.contains(clientState!.userId); return Tooltip( - message: reactors?[reaction]?.join(", ") ?? "", + message: reactors.join(", "), child: ChoiceChip( showCheckmark: false, selected: selected, @@ -56,7 +53,10 @@ class const ReactionRow(final Event event, {super.key}) extends ConsumerWidget { ) : Text(reaction, overflow: .ellipsis), ), - Text(count.toString(), overflow: .ellipsis), + Text( + reactors.length.toString(), + overflow: .ellipsis, + ), ], ), onSelected: enabled.value @@ -75,7 +75,7 @@ class const ReactionRow(final Event event, {super.key}) extends ConsumerWidget { .removeReaction( reaction, event, - clientState!.userId!, + clientState.userId!, ) .onError(showError); } else { @@ -100,6 +100,8 @@ class const ReactionRow(final Event event, {super.key}) extends ConsumerWidget { error, stackTrace, ), + + _ => SizedBox.shrink(), }, ); }