diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 47240669..39bc7319 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -76,7 +76,7 @@ class ChatPageWithRoom extends StatefulWidget { } class ChatController extends State { - Room get room => widget.room; + Room get room => sendingClient.getRoomById(roomId) ?? widget.room; late Client sendingClient; @@ -368,7 +368,7 @@ class ChatController extends State { TextEditingController sendController = TextEditingController(); void setSendingClient(Client c) { - // first cancle typing with the old sending client + // first cancel typing with the old sending client if (currentlyTyping) { // no need to have the setting typing to false be blocking typingCoolDown?.cancel(); @@ -376,6 +376,10 @@ class ChatController extends State { room.setTyping(false); currentlyTyping = false; } + // then cancel the old timeline + // fixes bug with read reciepts and quick switching + loadTimelineFuture = _getTimeline(eventContextId: room.fullyRead); + // then set the new sending client setState(() => sendingClient = c); } @@ -393,7 +397,7 @@ class ChatController extends State { final commandMatch = RegExp(r'^\/(\w+)').firstMatch(sendController.text); if (commandMatch != null && - !room.client.commands.keys.contains(commandMatch[1]!.toLowerCase())) { + !sendingClient.commands.keys.contains(commandMatch[1]!.toLowerCase())) { final l10n = L10n.of(context)!; final dialogResult = await showOkCancelAlertDialog( context: context,