1371 staging bug or maybe technical design issue with morph choices (#1372)
* fix: don't show morph activity if no distractors are available * mend
This commit is contained in:
parent
9ecf4e3bd2
commit
350c9e6840
2 changed files with 48 additions and 26 deletions
|
|
@ -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…
Add table
Reference in a new issue