From 783085d44c6f2f2fa1d40ec6119ad7c94e5d5491 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Mon, 29 Sep 2025 10:10:30 -0400 Subject: [PATCH] fix: don't dispose new word overlay animation early (#4168) --- .../toolbar/widgets/message_selection_overlay.dart | 10 ---------- .../toolbar/widgets/reading_assistance_content.dart | 2 ++ .../toolbar/widgets/word_zoom/new_word_overlay.dart | 11 +++++++---- .../toolbar/widgets/word_zoom/word_zoom_widget.dart | 3 +++ 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/lib/pangea/toolbar/widgets/message_selection_overlay.dart b/lib/pangea/toolbar/widgets/message_selection_overlay.dart index ed5d1875d..503f808cf 100644 --- a/lib/pangea/toolbar/widgets/message_selection_overlay.dart +++ b/lib/pangea/toolbar/widgets/message_selection_overlay.dart @@ -517,9 +517,6 @@ class MessageOverlayController extends State void onSelectNewToken(PangeaToken token) { if (!isNewToken(token)) return; - final future = - MatrixState.pangeaController.getAnalytics.analyticsStream.stream.first; - MatrixState.pangeaController.putAnalytics.setState( AnalyticsStream( eventId: event.eventId, @@ -542,13 +539,6 @@ class MessageOverlayController extends State targetID: "word-zoom-card-${token.text.uniqueKey}", ), ); - - future.then((_) { - TokensUtil.clearNewTokenCache(); - if (mounted) { - setState(() {}); - } - }); } /// Whether the given token is currently selected or highlighted diff --git a/lib/pangea/toolbar/widgets/reading_assistance_content.dart b/lib/pangea/toolbar/widgets/reading_assistance_content.dart index 126ad7e92..004824b2b 100644 --- a/lib/pangea/toolbar/widgets/reading_assistance_content.dart +++ b/lib/pangea/toolbar/widgets/reading_assistance_content.dart @@ -123,6 +123,8 @@ class ReadingAssistanceContentState extends State { onClose: () => widget.overlayController.updateSelectedSpan(null), langCode: widget .overlayController.pangeaMessageEvent.messageDisplayLangCode, + onDismissNewWordOverlay: () => + widget.overlayController.setState(() {}), ); } } diff --git a/lib/pangea/toolbar/widgets/word_zoom/new_word_overlay.dart b/lib/pangea/toolbar/widgets/word_zoom/new_word_overlay.dart index bd32f745d..82678805e 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/new_word_overlay.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/new_word_overlay.dart @@ -5,16 +5,19 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; +import 'package:fluffychat/pangea/message_token_text/tokens_util.dart'; import 'package:fluffychat/widgets/matrix.dart'; class NewWordOverlay extends StatefulWidget { final Color overlayColor; final String transformTargetId; + final VoidCallback? onDismiss; const NewWordOverlay({ super.key, required this.overlayColor, required this.transformTargetId, + this.onDismiss, }); @override @@ -57,7 +60,10 @@ class _NewWordOverlayState extends State WidgetsBinding.instance.addPostFrameCallback((_) { columnMode = FluffyThemes.isColumnMode(context); _showFlyingWidget(); - _controller?.forward(); + _controller?.forward().then((_) { + TokensUtil.clearNewTokenCache(); + widget.onDismiss?.call(); + }); }); } @@ -80,9 +86,6 @@ class _NewWordOverlayState extends State context: context, closePrevOverlay: false, ignorePointer: true, - // onDismiss: () { - // MatrixState.pAnyState.closeOverlay(widget.transformTargetId); - // }, offset: const Offset(0, 65), targetAnchor: Alignment.center, overlayKey: widget.transformTargetId, diff --git a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart index ccc7aae04..ef00d7edf 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart @@ -27,6 +27,7 @@ class WordZoomWidget extends StatelessWidget { final VoidCallback onClose; final bool wordIsNew; + final VoidCallback? onDismissNewWordOverlay; final Event? event; const WordZoomWidget({ @@ -36,6 +37,7 @@ class WordZoomWidget extends StatelessWidget { required this.langCode, required this.onClose, this.wordIsNew = false, + this.onDismissNewWordOverlay, this.event, }); @@ -261,6 +263,7 @@ class WordZoomWidget extends StatelessWidget { key: ValueKey(transformTargetId), overlayColor: overlayColor, transformTargetId: transformTargetId, + onDismiss: onDismissNewWordOverlay, ) : const SizedBox.shrink(), ],