From 9d7bc52513c0dbf07f1ddaf0020b67ee7e7cb128 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Wed, 10 Aug 2022 21:38:08 +0200 Subject: [PATCH] fix: Do not rebuild chat view twice on each message --- lib/pages/chat/chat_view.dart | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 2cae86d18..220f7a94c 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -120,6 +120,12 @@ class ChatView extends StatelessWidget { } } + bool hasRoomStateUpdate(SyncUpdate syncUpdate) => + syncUpdate.rooms?.leave?[controller.roomId]?.state?.isNotEmpty == true || + syncUpdate.rooms?.invite?[controller.roomId]?.inviteState?.isNotEmpty == + true || + syncUpdate.rooms?.join?[controller.roomId]?.state?.isNotEmpty == true; + @override Widget build(BuildContext context) { controller.matrix ??= Matrix.of(context); @@ -157,8 +163,12 @@ class ChatView extends StatelessWidget { onTapDown: controller.setReadMarker, behavior: HitTestBehavior.opaque, child: StreamBuilder( - stream: controller.room!.onUpdate.stream - .rateLimit(const Duration(milliseconds: 250)), + stream: Matrix.of(context) + .client + .onSync + .stream + .where(hasRoomStateUpdate) + .rateLimit(const Duration(seconds: 1)), builder: (context, snapshot) => FutureBuilder( future: controller.getTimeline(), builder: (BuildContext context, snapshot) {