From 3cf69183941d022b7dea9adcde013faeee7fea75 Mon Sep 17 00:00:00 2001 From: Ava Shilling <165050625+avashilling@users.noreply.github.com> Date: Fri, 30 Jan 2026 12:41:46 -0500 Subject: [PATCH] fix: add exampleMessage to AnalyticsActivityTarget and remove it from PracticeTarget --- .../analytics_practice/analytics_practice_page.dart | 8 +++----- .../analytics_practice_session_model.dart | 13 +++++++++++++ .../analytics_practice_session_repo.dart | 6 ++++-- .../analytics_practice/analytics_practice_view.dart | 4 ++-- .../message_activity_request.dart | 3 +++ lib/pangea/practice_activities/practice_target.dart | 5 ----- 6 files changed, 25 insertions(+), 14 deletions(-) diff --git a/lib/pangea/analytics_practice/analytics_practice_page.dart b/lib/pangea/analytics_practice/analytics_practice_page.dart index 3988184ae..1bcc52d01 100644 --- a/lib/pangea/analytics_practice/analytics_practice_page.dart +++ b/lib/pangea/analytics_practice/analytics_practice_page.dart @@ -23,7 +23,6 @@ import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_generation_repo.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; import 'package:fluffychat/pangea/toolbar/message_practice/practice_record_controller.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -538,20 +537,19 @@ class AnalyticsPracticeState extends State } Future?> getExampleMessage( - PracticeTarget target, + MessageActivityRequest activityRequest, ) async { + final target = activityRequest.target; final token = target.tokens.first; final construct = target.targetTokenConstructID(token); - String? form; if (widget.type == ConstructTypeEnum.morph) { - return target.exampleMessage; + return activityRequest.morphExampleInfo?.exampleMessage; } return ExampleMessageUtil.getExampleMessage( await _analyticsService.getConstructUse(construct), Matrix.of(context).client, - form: form, ); } diff --git a/lib/pangea/analytics_practice/analytics_practice_session_model.dart b/lib/pangea/analytics_practice/analytics_practice_session_model.dart index 9ab395a13..24020a8f1 100644 --- a/lib/pangea/analytics_practice/analytics_practice_session_model.dart +++ b/lib/pangea/analytics_practice/analytics_practice_session_model.dart @@ -1,16 +1,28 @@ +import 'package:flutter/painting.dart'; + import 'package:fluffychat/pangea/analytics_misc/construct_use_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; import 'package:fluffychat/pangea/analytics_practice/analytics_practice_constants.dart'; import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; +class MorphExampleInfo { + final List exampleMessage; + + const MorphExampleInfo({ + required this.exampleMessage, + }); +} + class AnalyticsActivityTarget { final PracticeTarget target; final GrammarErrorRequestInfo? grammarErrorInfo; + final MorphExampleInfo? morphExampleInfo; AnalyticsActivityTarget({ required this.target, this.grammarErrorInfo, + this.morphExampleInfo, }); Map toJson() => { @@ -79,6 +91,7 @@ class AnalyticsPracticeSessionModel { activityQualityFeedback: null, target: target.target, grammarErrorInfo: target.grammarErrorInfo, + morphExampleInfo: target.morphExampleInfo, ); }).toList(); } diff --git a/lib/pangea/analytics_practice/analytics_practice_session_repo.dart b/lib/pangea/analytics_practice/analytics_practice_session_repo.dart index 9c430bcb0..9172acf04 100644 --- a/lib/pangea/analytics_practice/analytics_practice_session_repo.dart +++ b/lib/pangea/analytics_practice/analytics_practice_session_repo.dart @@ -73,6 +73,8 @@ class AnalyticsPracticeSessionRepo { tokens: [entry.token], activityType: ActivityTypeEnum.grammarCategory, morphFeature: entry.feature, + ), + morphExampleInfo: MorphExampleInfo( exampleMessage: entry.exampleMessage, ), ), @@ -371,11 +373,11 @@ class AnalyticsPracticeSessionRepo { class MorphPracticeTarget { final PangeaToken token; final MorphFeaturesEnum feature; - final List? exampleMessage; + final List exampleMessage; MorphPracticeTarget({ required this.token, required this.feature, - this.exampleMessage, + required this.exampleMessage, }); } diff --git a/lib/pangea/analytics_practice/analytics_practice_view.dart b/lib/pangea/analytics_practice/analytics_practice_view.dart index 5e5b31f76..7dc768784 100644 --- a/lib/pangea/analytics_practice/analytics_practice_view.dart +++ b/lib/pangea/analytics_practice/analytics_practice_view.dart @@ -213,7 +213,7 @@ class _AnalyticsPracticeCenterContent extends StatelessWidget { children: [ _CorrectAnswerHint(controller: controller), _ExampleMessageWidget( - controller.getExampleMessage(target!.target), + controller.getExampleMessage(target!), ), const SizedBox(height: 12), ValueListenableBuilder( @@ -232,7 +232,7 @@ class _AnalyticsPracticeCenterContent extends StatelessWidget { height: 100.0, child: Center( child: _ExampleMessageWidget( - controller.getExampleMessage(target!.target), + controller.getExampleMessage(target!), ), ), ), diff --git a/lib/pangea/practice_activities/message_activity_request.dart b/lib/pangea/practice_activities/message_activity_request.dart index 7452dd026..ec6a9e491 100644 --- a/lib/pangea/practice_activities/message_activity_request.dart +++ b/lib/pangea/practice_activities/message_activity_request.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_practice/analytics_practice_session_model.dart'; import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; @@ -79,6 +80,7 @@ class MessageActivityRequest { final PracticeTarget target; final ActivityQualityFeedback? activityQualityFeedback; final GrammarErrorRequestInfo? grammarErrorInfo; + final MorphExampleInfo? morphExampleInfo; MessageActivityRequest({ required this.userL1, @@ -86,6 +88,7 @@ class MessageActivityRequest { required this.activityQualityFeedback, required this.target, this.grammarErrorInfo, + this.morphExampleInfo, }) { if (target.tokens.isEmpty) { throw Exception('Target tokens must not be empty'); diff --git a/lib/pangea/practice_activities/practice_target.dart b/lib/pangea/practice_activities/practice_target.dart index 93778c1b4..87c1ce7e7 100644 --- a/lib/pangea/practice_activities/practice_target.dart +++ b/lib/pangea/practice_activities/practice_target.dart @@ -1,5 +1,4 @@ import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; @@ -25,14 +24,10 @@ class PracticeTarget { /// this is only defined for morphId activities final MorphFeaturesEnum? morphFeature; - /// Generated example message for the target, if applicable - final List? exampleMessage; - PracticeTarget({ required this.tokens, required this.activityType, this.morphFeature, - this.exampleMessage, }) { if (ActivityTypeEnum.morphId == activityType && morphFeature == null) { throw Exception("morphFeature must be defined for morphId activities");