diff --git a/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart b/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart index 532decb5b..c0115a0fd 100644 --- a/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart +++ b/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart @@ -144,9 +144,7 @@ class MorphFeatureBox extends StatelessWidget { morphFeature: morphFeature, morphTag: morphTag, constructAnalytics: analytics, - onTap: analytics.points > 10 - ? () => onConstructZoom(id) - : null, + onTap: () => onConstructZoom(id), ); }, ) @@ -185,7 +183,7 @@ class MorphTagChip extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final unlocked = constructAnalytics.points > 10; + final unlocked = constructAnalytics.points > 0; return InkWell( borderRadius: BorderRadius.circular(AppConfig.borderRadius), diff --git a/lib/pangea/analytics_misc/construct_list_model.dart b/lib/pangea/analytics_misc/construct_list_model.dart index 4022b6b17..2819af958 100644 --- a/lib/pangea/analytics_misc/construct_list_model.dart +++ b/lib/pangea/analytics_misc/construct_list_model.dart @@ -45,7 +45,7 @@ class ConstructListModel { 0, (total, match) => total + match.points, ); - if (totalPoints > 10) { + if (totalPoints > 25) { unlocked.add(matches.first.id); } } diff --git a/lib/pangea/analytics_summary/learning_progress_indicators.dart b/lib/pangea/analytics_summary/learning_progress_indicators.dart index 0032513f2..ac28bc546 100644 --- a/lib/pangea/analytics_summary/learning_progress_indicators.dart +++ b/lib/pangea/analytics_summary/learning_progress_indicators.dart @@ -85,7 +85,7 @@ class LearningProgressIndicatorsState int uniqueLemmas(ProgressIndicatorEnum indicator) { switch (indicator) { case ProgressIndicatorEnum.morphsUsed: - return _constructsModel.unlockedGrammarLemmas.length; + return _constructsModel.grammarLemmas; case ProgressIndicatorEnum.wordsUsed: return _constructsModel.vocabLemmas; default: diff --git a/lib/pangea/choreographer/controllers/it_controller.dart b/lib/pangea/choreographer/controllers/it_controller.dart index 2eb738c1f..216bbeca4 100644 --- a/lib/pangea/choreographer/controllers/it_controller.dart +++ b/lib/pangea/choreographer/controllers/it_controller.dart @@ -166,7 +166,7 @@ class ITController { } else { nextITStep = Completer(); final nextStep = await getNextTranslationData(); - nextITStep!.complete(nextStep); + nextITStep?.complete(nextStep); } } catch (e, s) { debugger(when: kDebugMode); diff --git a/lib/pangea/choreographer/controllers/span_data_controller.dart b/lib/pangea/choreographer/controllers/span_data_controller.dart index 9102e8914..f7022cd0c 100644 --- a/lib/pangea/choreographer/controllers/span_data_controller.dart +++ b/lib/pangea/choreographer/controllers/span_data_controller.dart @@ -73,9 +73,12 @@ class SpanDataController { normalizeString(correctChoice) == normalizeString(errorSpan); } - Future getSpanDetails(int matchIndex) async { + Future getSpanDetails( + int matchIndex, { + bool force = false, + }) async { final SpanData? span = _getSpan(matchIndex); - if (span == null || isNormalizationError(matchIndex)) return; + if (span == null || (isNormalizationError(matchIndex) && !force)) return; final req = SpanDetailsRepoReqAndRes( userL1: choreographer.l1LangCode!, diff --git a/lib/pangea/choreographer/widgets/igc/span_card.dart b/lib/pangea/choreographer/widgets/igc/span_card.dart index 135936e31..1de869c41 100644 --- a/lib/pangea/choreographer/widgets/igc/span_card.dart +++ b/lib/pangea/choreographer/widgets/igc/span_card.dart @@ -115,7 +115,7 @@ class SpanCardState extends State { } } - Future getSpanDetails() async { + Future getSpanDetails({bool force = false}) async { try { if (widget.scm.pangeaMatch?.isITStart ?? false) return; @@ -124,8 +124,10 @@ class SpanCardState extends State { fetchingData = true; }); - await widget.scm.choreographer.igc.spanDataController - .getSpanDetails(widget.scm.matchIndex); + await widget.scm.choreographer.igc.spanDataController.getSpanDetails( + widget.scm.matchIndex, + force: force, + ); if (mounted) { setState(() => fetchingData = false); @@ -450,7 +452,7 @@ class PromptAndFeedback extends StatelessWidget { WhyButton( onPress: () { if (!controller.fetchingData) { - controller.getSpanDetails(); + controller.getSpanDetails(force: true); } }, loading: controller.fetchingData, diff --git a/lib/pangea/choreographer/widgets/start_igc_button.dart b/lib/pangea/choreographer/widgets/start_igc_button.dart index 94e31d0f8..f8a633d8a 100644 --- a/lib/pangea/choreographer/widgets/start_igc_button.dart +++ b/lib/pangea/choreographer/widgets/start_igc_button.dart @@ -67,6 +67,11 @@ class StartIGCButtonState extends State } } + bool get _enableFeedback { + return assistanceState != AssistanceState.fetching && + assistanceState != AssistanceState.complete; + } + Future _onTap() async { switch (assistanceState) { case AssistanceState.noSub: @@ -108,13 +113,16 @@ class StartIGCButtonState extends State Widget build(BuildContext context) { return SizedBox( child: InkWell( - onTap: _onTap, + enableFeedback: _enableFeedback, + onTap: _enableFeedback ? _onTap : null, customBorder: const CircleBorder(), - onLongPress: () => showDialog( - context: context, - builder: (c) => const SettingsLearning(), - barrierDismissible: false, - ), + onLongPress: _enableFeedback + ? () => showDialog( + context: context, + builder: (c) => const SettingsLearning(), + barrierDismissible: false, + ) + : null, child: Stack( alignment: Alignment.center, children: [