From 34ae1f30aa812a5c08ef7b6edf18496512588fe9 Mon Sep 17 00:00:00 2001 From: Ava Shilling <165050625+avashilling@users.noreply.github.com> Date: Tue, 20 Jan 2026 16:28:08 -0500 Subject: [PATCH] Fix grammar error null error and only reload current question upon encountering error --- .../analytics_practice_page.dart | 19 +++++++++++++++ .../analytics_practice_session_repo.dart | 23 +++++++++++-------- .../analytics_practice_view.dart | 2 +- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/lib/pangea/analytics_practice/analytics_practice_page.dart b/lib/pangea/analytics_practice/analytics_practice_page.dart index f5fd80ea8..d2300633b 100644 --- a/lib/pangea/analytics_practice/analytics_practice_page.dart +++ b/lib/pangea/analytics_practice/analytics_practice_page.dart @@ -269,6 +269,25 @@ class AnalyticsPracticeState extends State await _startSession(); } + Future reloadCurrentActivity() async { + if (activityTarget.value == null) return; + + try { + activityState.value = const AsyncState.loading(); + selectedMorphChoice.value = null; + + final req = activityTarget.value!; + final res = await _fetchActivity(req); + + if (!mounted) return; + activityState.value = AsyncState.loaded(res); + _playAudio(); + } catch (e) { + if (!mounted) return; + activityState.value = AsyncState.error(e); + } + } + Future _completeSession() async { _sessionLoader.value!.finishSession(); setState(() {}); diff --git a/lib/pangea/analytics_practice/analytics_practice_session_repo.dart b/lib/pangea/analytics_practice/analytics_practice_session_repo.dart index 378dc4486..e7d908391 100644 --- a/lib/pangea/analytics_practice/analytics_practice_session_repo.dart +++ b/lib/pangea/analytics_practice/analytics_practice_session_repo.dart @@ -56,7 +56,7 @@ class AnalyticsPracticeSessionRepo { AnalyticsActivityTarget( target: PracticeTarget( tokens: [entry.key], - activityType: types[targets.length], + activityType: ActivityTypeEnum.grammarCategory, morphFeature: entry.value, ), ), @@ -231,18 +231,23 @@ class AnalyticsPracticeSessionRepo { } final choices = igcMatch!.match.choices!.map((c) => c.value).toList(); - final choiceTokens = tokens.where( - (token) => - token.lemma.saveVocab && - choices.any( - (choice) => choice.contains(token.text.content), - ), - ); + final choiceTokens = tokens + .where( + (token) => + token.lemma.saveVocab && + choices.any( + (choice) => choice.contains(token.text.content), + ), + ) + .toList(); + + // Skip if no valid tokens found for this grammar error + if (choiceTokens.isEmpty) continue; targets.add( AnalyticsActivityTarget( target: PracticeTarget( - tokens: choiceTokens.toList(), + tokens: choiceTokens, activityType: ActivityTypeEnum.grammarError, morphFeature: null, ), diff --git a/lib/pangea/analytics_practice/analytics_practice_view.dart b/lib/pangea/analytics_practice/analytics_practice_view.dart index 5d5be5966..ba8dddb82 100644 --- a/lib/pangea/analytics_practice/analytics_practice_view.dart +++ b/lib/pangea/analytics_practice/analytics_practice_view.dart @@ -329,7 +329,7 @@ class _ActivityChoicesWidget extends StatelessWidget { ErrorIndicator(message: error.toString()), const SizedBox(height: 16), TextButton.icon( - onPressed: controller.reloadSession, + onPressed: controller.reloadCurrentActivity, icon: const Icon(Icons.refresh), label: Text(L10n.of(context).tryAgain), ),