From 5722cb71bb2d1b2489073911451af18ea8a97a73 Mon Sep 17 00:00:00 2001 From: otsmr Date: Wed, 22 Apr 2026 19:52:02 +0200 Subject: [PATCH] add missing mounted guards --- lib/src/visual/components/verification_badge.comp.dart | 2 ++ .../views/chats/chat_list_components/group_list_item.comp.dart | 2 ++ lib/src/visual/views/chats/chat_messages.view.dart | 1 + .../bottom_sheets/all_reactions.bottom_sheet.dart | 1 + .../views/chats/chat_messages_components/chat_list_entry.dart | 1 + .../chat_messages_components/entries/chat_audio_entry.dart | 2 +- .../views/chats/chat_messages_components/message_input.dart | 1 + lib/src/visual/views/chats/message_info.view.dart | 3 +++ .../views/settings/developer/retransmission_data.view.dart | 2 ++ 9 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/src/visual/components/verification_badge.comp.dart b/lib/src/visual/components/verification_badge.comp.dart index 28eef92b..1d7b214b 100644 --- a/lib/src/visual/components/verification_badge.comp.dart +++ b/lib/src/visual/components/verification_badge.comp.dart @@ -39,6 +39,7 @@ class _VerificationBadgeCompState extends State { _streamAllVerified = twonlyDB.keyVerificationDao .watchAllGroupMembersVerified(widget.group!.groupId) .listen((update) { + if (!mounted) return; setState(() { _isVerified = update; }); @@ -47,6 +48,7 @@ class _VerificationBadgeCompState extends State { _streamContactVerification = twonlyDB.keyVerificationDao .watchContactVerification(widget.contact!.userId) .listen((update) { + if (!mounted) return; setState(() { _isVerified = update.isNotEmpty; }); diff --git a/lib/src/visual/views/chats/chat_list_components/group_list_item.comp.dart b/lib/src/visual/views/chats/chat_list_components/group_list_item.comp.dart index 50ab9408..225a3195 100644 --- a/lib/src/visual/views/chats/chat_list_components/group_list_item.comp.dart +++ b/lib/src/visual/views/chats/chat_list_components/group_list_item.comp.dart @@ -76,6 +76,7 @@ class _UserListItem extends State { _lastReactionStream = twonlyDB.reactionsDao .watchLastReactions(widget.group.groupId) .listen((update) { + if (!mounted) return; setState(() { _lastReaction = update; }); @@ -92,6 +93,7 @@ class _UserListItem extends State { _lastMediaFilesStream = twonlyDB.mediaFilesDao .watchNewestMediaFiles() .listen((mediaFiles) { + if (!mounted) return; for (final mediaFile in mediaFiles) { final index = _previewMediaFiles.indexWhere( (t) => t.mediaId == mediaFile.mediaId, diff --git a/lib/src/visual/views/chats/chat_messages.view.dart b/lib/src/visual/views/chats/chat_messages.view.dart index 1e27634b..49ba1b7b 100644 --- a/lib/src/visual/views/chats/chat_messages.view.dart +++ b/lib/src/visual/views/chats/chat_messages.view.dart @@ -83,6 +83,7 @@ class _ChatMessagesViewState extends State { final groupStream = twonlyDB.groupsDao.watchGroup(widget.groupId); userSub = groupStream.listen((newGroup) { if (newGroup == null) return; + if (!mounted) return; setState(() { _group = newGroup; }); diff --git a/lib/src/visual/views/chats/chat_messages_components/bottom_sheets/all_reactions.bottom_sheet.dart b/lib/src/visual/views/chats/chat_messages_components/bottom_sheets/all_reactions.bottom_sheet.dart index 7236fd93..3fceebe9 100644 --- a/lib/src/visual/views/chats/chat_messages_components/bottom_sheets/all_reactions.bottom_sheet.dart +++ b/lib/src/visual/views/chats/chat_messages_components/bottom_sheets/all_reactions.bottom_sheet.dart @@ -42,6 +42,7 @@ class _AllReactionsViewState extends State { ); reactionsSub = stream.listen((update) { + if (!mounted) return; setState(() { reactionsUsers = update; }); diff --git a/lib/src/visual/views/chats/chat_messages_components/chat_list_entry.dart b/lib/src/visual/views/chats/chat_messages_components/chat_list_entry.dart index ed64b5cd..d9786ac6 100644 --- a/lib/src/visual/views/chats/chat_messages_components/chat_list_entry.dart +++ b/lib/src/visual/views/chats/chat_messages_components/chat_list_entry.dart @@ -93,6 +93,7 @@ class _ChatListEntryState extends State { ); reactionsSub = stream.listen((update) { + if (!mounted) return; setState(() { reactions = update; }); diff --git a/lib/src/visual/views/chats/chat_messages_components/entries/chat_audio_entry.dart b/lib/src/visual/views/chats/chat_messages_components/entries/chat_audio_entry.dart index db0fa6ab..91c43a3d 100644 --- a/lib/src/visual/views/chats/chat_messages_components/entries/chat_audio_entry.dart +++ b/lib/src/visual/views/chats/chat_messages_components/entries/chat_audio_entry.dart @@ -139,7 +139,7 @@ class _InChatAudioPlayerState extends State { DurationType.max, ); _maxDuration = _displayDuration; - setState(() {}); + if (mounted) setState(() {}); } }); diff --git a/lib/src/visual/views/chats/chat_messages_components/message_input.dart b/lib/src/visual/views/chats/chat_messages_components/message_input.dart index 9cc45bd1..1bb63f47 100644 --- a/lib/src/visual/views/chats/chat_messages_components/message_input.dart +++ b/lib/src/visual/views/chats/chat_messages_components/message_input.dart @@ -97,6 +97,7 @@ class _MessageInputState extends State { void _initializeControllers() { recorderController = RecorderController(); recorderController.onCurrentDuration.listen((duration) { + if (!mounted) return; setState(() { _currentDuration = duration.inMilliseconds; }); diff --git a/lib/src/visual/views/chats/message_info.view.dart b/lib/src/visual/views/chats/message_info.view.dart index 8262045b..f77f2171 100644 --- a/lib/src/visual/views/chats/message_info.view.dart +++ b/lib/src/visual/views/chats/message_info.view.dart @@ -58,6 +58,7 @@ class _MessageInfoViewState extends State { widget.message.messageId, ); actionsStream = streamActions.listen((update) { + if (!mounted) return; setState(() { messageActions = update; }); @@ -67,6 +68,7 @@ class _MessageInfoViewState extends State { widget.message.groupId, ); groupMemberStream = streamGroup.listen((update) { + if (!mounted) return; setState(() { groupMembers = update; }); @@ -76,6 +78,7 @@ class _MessageInfoViewState extends State { widget.message.messageId, ); historyStream = streamHistory.listen((update) { + if (!mounted) return; setState(() { messageHistory = update; }); diff --git a/lib/src/visual/views/settings/developer/retransmission_data.view.dart b/lib/src/visual/views/settings/developer/retransmission_data.view.dart index db8a62f0..a7cc1386 100644 --- a/lib/src/visual/views/settings/developer/retransmission_data.view.dart +++ b/lib/src/visual/views/settings/developer/retransmission_data.view.dart @@ -74,6 +74,7 @@ class _RetransmissionDataViewState extends State { subscriptionContacts = twonlyDB.contactsDao.watchAllContacts().listen(( updated, ) { + if (!mounted) return; for (final contact in updated) { contacts[contact.userId] = contact; } @@ -85,6 +86,7 @@ class _RetransmissionDataViewState extends State { subscriptionRetransmission = twonlyDB.receiptsDao.watchAll().listen(( updated, ) { + if (!mounted) return; retransmissions = updated.reversed.toList(); if (contacts.isNotEmpty) { messages = RetransMsg.fromRaw(retransmissions, contacts);