1371 staging bug or maybe technical design issue with morph choices (#1372)

* fix: don't show morph activity if no distractors are available

* mend
pull/1593/head
ggurdin 11 months ago committed by GitHub
parent 9ecf4e3bd2
commit 350c9e6840
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -351,32 +351,47 @@ class PangeaToken {
?.value;
}
Future<bool> canGenerateDistractors(
/// Syncronously determine if a distractor can be generated for a given activity type.
/// WARNING - do not use this function to determine if lemma activities can be generated.
/// Use [canGenerateLemmaDistractors] instead.
bool canGenerateDistractors(
ActivityTypeEnum type, {
String? morphFeature,
String? morphTag,
}) async {
}) {
final constructListModel =
MatrixState.pangeaController.getAnalytics.constructListModel;
switch (type) {
case ActivityTypeEnum.lemmaId:
final distractors =
await constructListModel.lemmaActivityDistractors(this);
return distractors.isNotEmpty;
// the function to determine this for lemmas is async
// do not use this function for lemma activities
debugger(when: kDebugMode);
return false;
case ActivityTypeEnum.morphId:
final distractors = constructListModel.morphActivityDistractors(
morphFeature!,
morphTag!,
);
return distractors.isNotEmpty;
case ActivityTypeEnum.wordMeaning:
return LemmaDictionaryRepo.getDistractorDefinitions(
lemma.text,
1,
).isNotEmpty;
case ActivityTypeEnum.emoji:
case ActivityTypeEnum.wordFocusListening:
case ActivityTypeEnum.wordMeaning:
case ActivityTypeEnum.hiddenWordListening:
return true;
}
}
Future<bool> canGenerateLemmaDistractors() async {
final constructListModel =
MatrixState.pangeaController.getAnalytics.constructListModel;
final distractors = await constructListModel.lemmaActivityDistractors(this);
return distractors.isNotEmpty;
}
// maybe for every 5 points of xp for a particular activity, increment the days between uses by 2
bool shouldDoActivity({
required ActivityTypeEnum a,

@ -7,7 +7,6 @@ import 'package:fluffychat/pangea/controllers/message_analytics_controller.dart'
import 'package:fluffychat/pangea/enum/activity_type_enum.dart';
import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart';
import 'package:fluffychat/pangea/models/pangea_token_model.dart';
import 'package:fluffychat/pangea/repo/lemma_definition_repo.dart';
import 'package:fluffychat/pangea/utils/grammar/get_grammar_copy.dart';
import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart';
import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart';
@ -79,12 +78,6 @@ class WordZoomWidgetState extends State<WordZoomWidget> {
// is computationally expensive, so we only do it once
bool _canGenerateLemmaActivity = false;
bool get _canGenerateDefintionActivity =>
LemmaDictionaryRepo.getDistractorDefinitions(
widget.token.lemma.text,
1,
).isNotEmpty;
@override
void initState() {
super.initState();
@ -111,8 +104,7 @@ class WordZoomWidgetState extends State<WordZoomWidget> {
}
Future<void> _setCanGenerateLemmaActivity() async {
final canGenerate =
await widget.token.canGenerateDistractors(ActivityTypeEnum.lemmaId);
final canGenerate = await widget.token.canGenerateLemmaDistractors();
if (mounted) setState(() => _canGenerateLemmaActivity = canGenerate);
}
@ -181,17 +173,32 @@ class WordZoomWidgetState extends State<WordZoomWidget> {
});
}
bool _shouldShowActivity(WordZoomSelection selection) =>
widget.token.shouldDoActivity(
a: selection.activityType,
feature: _selectedMorphFeature,
tag: _selectedMorphFeature == null
? null
: widget.token.morph[_selectedMorphFeature],
) &&
(selection != WordZoomSelection.lemma || _canGenerateLemmaActivity) &&
(selection != WordZoomSelection.translation ||
_canGenerateDefintionActivity);
bool _shouldShowActivity(WordZoomSelection selection) {
final shouldDo = widget.token.shouldDoActivity(
a: selection.activityType,
feature: _selectedMorphFeature,
tag: _selectedMorphFeature == null
? null
: widget.token.morph[_selectedMorphFeature],
);
if (!shouldDo) return false;
switch (selection) {
case WordZoomSelection.lemma:
return _canGenerateLemmaActivity;
case WordZoomSelection.translation:
case WordZoomSelection.morph:
return widget.token.canGenerateDistractors(
selection.activityType,
morphFeature: _selectedMorphFeature,
morphTag: _selectedMorphFeature == null
? null
: widget.token.morph[_selectedMorphFeature],
);
case WordZoomSelection.emoji:
return true;
}
}
@override
Widget build(BuildContext context) {

Loading…
Cancel
Save