diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart index 284c020e6..eae69be7b 100644 --- a/lib/pages/chat/events/html_message.dart +++ b/lib/pages/chat/events/html_message.dart @@ -15,7 +15,6 @@ import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/message_token_text/message_token_button.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; import 'package:fluffychat/pangea/toolbar/utils/token_rendering_util.dart'; import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; @@ -395,6 +394,9 @@ class HtmlMessage extends StatelessWidget { ); return WidgetSpan( + alignment: readingAssistanceMode == ReadingAssistanceMode.practiceMode + ? PlaceholderAlignment.bottom + : PlaceholderAlignment.middle, child: CompositedTransformTarget( link: token != null && renderer.assignTokenKey ? MatrixState.pAnyState @@ -421,18 +423,6 @@ class HtmlMessage extends StatelessWidget { ), width: tokenWidth, animateIn: isTransitionAnimation, - practiceTargetForToken: - overlayController?.toolbarMode.associatedActivityType != - null - ? overlayController?.practiceSelection - ?.activities( - overlayController! - .toolbarMode.associatedActivityType!, - ) - .firstWhereOrNull( - (a) => a.tokens.contains(token), - ) - : null, ), MouseRegion( cursor: SystemMouseCursors.click, diff --git a/lib/pangea/message_token_text/message_token_button.dart b/lib/pangea/message_token_text/message_token_button.dart index 2b2624948..e4ac8cb1a 100644 --- a/lib/pangea/message_token_text/message_token_button.dart +++ b/lib/pangea/message_token_text/message_token_button.dart @@ -31,7 +31,6 @@ class MessageTokenButton extends StatefulWidget { final TextStyle textStyle; final double width; final bool animateIn; - final PracticeTarget? practiceTargetForToken; const MessageTokenButton({ super.key, @@ -39,7 +38,6 @@ class MessageTokenButton extends StatefulWidget { required this.token, required this.textStyle, required this.width, - required this.practiceTargetForToken, this.animateIn = false, }); @@ -124,9 +122,10 @@ class MessageTokenButtonState extends State super.dispose(); } - bool get _animate => widget.animateIn || _finishedInitialAnimation; + PracticeTarget? get _activity => + widget.overlayController?.practiceTargetForToken(widget.token); - PracticeTarget? get _activity => widget.practiceTargetForToken; + bool get _animate => widget.animateIn || _finishedInitialAnimation; bool get _isActivityCompleteOrNullForToken => _activity?.isCompleteByToken( diff --git a/lib/pangea/toolbar/widgets/message_selection_overlay.dart b/lib/pangea/toolbar/widgets/message_selection_overlay.dart index d95fee56a..0d11a862e 100644 --- a/lib/pangea/toolbar/widgets/message_selection_overlay.dart +++ b/lib/pangea/toolbar/widgets/message_selection_overlay.dart @@ -24,6 +24,7 @@ import 'package:fluffychat/pangea/practice_activities/practice_activity_model.da import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; import 'package:fluffychat/pangea/practice_activities/practice_selection.dart'; import 'package:fluffychat/pangea/practice_activities/practice_selection_repo.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; @@ -558,6 +559,13 @@ class MessageOverlayController extends State updateSelectedSpan(token.text); } + PracticeTarget? practiceTargetForToken(PangeaToken token) { + if (toolbarMode.associatedActivityType == null) return null; + return practiceSelection + ?.activities(toolbarMode.associatedActivityType!) + .firstWhereOrNull((a) => a.tokens.contains(token)); + } + /// Whether the given token is currently selected or highlighted bool isTokenSelected(PangeaToken token) { final isSelected = _selectedSpan?.offset == token.text.offset &&