diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 8df304f33..c5e41c8c1 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -660,7 +660,7 @@ class ChatController extends State //#Pangea choreographer.stateStream.close(); choreographer.dispose(); - MatrixState.pAnyState.closeAllOverlays(); + MatrixState.pAnyState.closeAllOverlays(force: true); showToolbarStream.close(); stopAudioStream.close(); hideTextController.dispose(); diff --git a/lib/pangea/choreographer/controllers/igc_controller.dart b/lib/pangea/choreographer/controllers/igc_controller.dart index c917653ab..cecf03ea0 100644 --- a/lib/pangea/choreographer/controllers/igc_controller.dart +++ b/lib/pangea/choreographer/controllers/igc_controller.dart @@ -202,7 +202,9 @@ class IgcController { } choreographer.chatController.inputFocus.unfocus(); - MatrixState.pAnyState.closeAllOverlays(RegExp(r'span_card_overlay_\d+')); + MatrixState.pAnyState.closeAllOverlays( + filter: RegExp(r'span_card_overlay_\d+'), + ); OverlayUtil.showPositionedCard( overlayKey: "span_card_overlay_$firstMatchIndex", context: context, diff --git a/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart b/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart index fd21337eb..d887eebbf 100644 --- a/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart +++ b/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart @@ -110,7 +110,9 @@ class PangeaTextController extends TextEditingController { : null; if (cardToShow != null) { - MatrixState.pAnyState.closeAllOverlays(RegExp(r'span_card_overlay_\d+')); + MatrixState.pAnyState.closeAllOverlays( + filter: RegExp(r'span_card_overlay_\d+'), + ); OverlayUtil.showPositionedCard( overlayKey: matchIndex != -1 ? "span_card_overlay_$matchIndex" : null, context: context, diff --git a/lib/pangea/common/utils/any_state_holder.dart b/lib/pangea/common/utils/any_state_holder.dart index da2ca0e3e..6fbb02a33 100644 --- a/lib/pangea/common/utils/any_state_holder.dart +++ b/lib/pangea/common/utils/any_state_holder.dart @@ -92,13 +92,19 @@ class PangeaAnyState { } } - void closeAllOverlays([RegExp? regex]) { - List shouldRemove = - entries.where((element) => element.canPop).toList(); - if (regex != null) { + void closeAllOverlays({ + RegExp? filter, + force = false, + }) { + List shouldRemove = List.from(entries); + if (!force) { + shouldRemove = shouldRemove.where((element) => element.canPop).toList(); + } + + if (filter != null) { shouldRemove = shouldRemove .where((element) => element.key != null) - .where((element) => regex.hasMatch(element.key!)) + .where((element) => filter.hasMatch(element.key!)) .toList(); } if (shouldRemove.isEmpty) return;