diff --git a/lib/controllers/room_chat.dart b/lib/controllers/room_chat.dart index 08e7ea7..01b2578 100644 --- a/lib/controllers/room_chat.dart +++ b/lib/controllers/room_chat.dart @@ -466,6 +466,8 @@ class RoomChatController(final ChatParams info) EventType type, Content content, ) async { + // The end event lands in the timeline and rebuilds this, so no ref after awaiting + final rooms = ref.read(RoomsController.provider.notifier); final event = await ref .read(ClientController.provider.notifier) .sendEvent( @@ -481,9 +483,7 @@ class RoomChatController(final ChatParams info) if (event.sendFailed) throw Exception(event.sendError); - await ref - .read(RoomsController.provider.notifier) - .awaitEvent(info.roomId, event.eventId); + await rooms.awaitEvent(info.roomId, event.eventId); } /// An empty [answers] removes the vote. diff --git a/lib/widgets/renderers/poll.dart b/lib/widgets/renderers/poll.dart index 84567cb..8b436e9 100644 --- a/lib/widgets/renderers/poll.dart +++ b/lib/widgets/renderers/poll.dart @@ -75,6 +75,7 @@ class const PollRenderer(final Event event, final PollStart poll, {super.key}) ) async { pending.value = action; await send().onError(showError); + if (!context.mounted) return; // Otherwise the old votes show until they're refetched await ref.read(votesProvider.future).onError((_, _) => const .new()); if (context.mounted) pending.value = null;