|
|
|
@ -31,13 +31,15 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|
|
|
class PracticeActivityCard extends StatefulWidget {
|
|
|
|
class PracticeActivityCard extends StatefulWidget {
|
|
|
|
final PangeaMessageEvent pangeaMessageEvent;
|
|
|
|
final PangeaMessageEvent pangeaMessageEvent;
|
|
|
|
final MessageOverlayController overlayController;
|
|
|
|
final MessageOverlayController overlayController;
|
|
|
|
final TtsController tts;
|
|
|
|
final TtsController ttsController;
|
|
|
|
|
|
|
|
final TargetTokensController targetTokensController;
|
|
|
|
|
|
|
|
|
|
|
|
const PracticeActivityCard({
|
|
|
|
const PracticeActivityCard({
|
|
|
|
super.key,
|
|
|
|
super.key,
|
|
|
|
required this.pangeaMessageEvent,
|
|
|
|
required this.pangeaMessageEvent,
|
|
|
|
required this.overlayController,
|
|
|
|
required this.overlayController,
|
|
|
|
required this.tts,
|
|
|
|
required this.ttsController,
|
|
|
|
|
|
|
|
required this.targetTokensController,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
@ -51,10 +53,6 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
|
|
|
|
PracticeActivityRecordModel? currentCompletionRecord;
|
|
|
|
PracticeActivityRecordModel? currentCompletionRecord;
|
|
|
|
bool fetchingActivity = false;
|
|
|
|
bool fetchingActivity = false;
|
|
|
|
|
|
|
|
|
|
|
|
// tracks the target tokens for the current message
|
|
|
|
|
|
|
|
// in a separate controller to manage the state
|
|
|
|
|
|
|
|
TargetTokensController targetTokensController = TargetTokensController();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<PracticeActivityEvent> get practiceActivities =>
|
|
|
|
List<PracticeActivityEvent> get practiceActivities =>
|
|
|
|
widget.pangeaMessageEvent.practiceActivities;
|
|
|
|
widget.pangeaMessageEvent.practiceActivities;
|
|
|
|
|
|
|
|
|
|
|
|
@ -124,7 +122,7 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
|
|
|
|
return null;
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (widget.pangeaMessageEvent.originalSent == null) {
|
|
|
|
if (widget.pangeaMessageEvent.messageDisplayRepresentation == null) {
|
|
|
|
debugger(when: kDebugMode);
|
|
|
|
debugger(when: kDebugMode);
|
|
|
|
_updateFetchingActivity(false);
|
|
|
|
_updateFetchingActivity(false);
|
|
|
|
ErrorHandler.logError(
|
|
|
|
ErrorHandler.logError(
|
|
|
|
@ -142,8 +140,8 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
|
|
|
|
MessageActivityRequest(
|
|
|
|
MessageActivityRequest(
|
|
|
|
userL1: pangeaController.languageController.userL1!.langCode,
|
|
|
|
userL1: pangeaController.languageController.userL1!.langCode,
|
|
|
|
userL2: pangeaController.languageController.userL2!.langCode,
|
|
|
|
userL2: pangeaController.languageController.userL2!.langCode,
|
|
|
|
messageText: widget.pangeaMessageEvent.originalSent!.text,
|
|
|
|
messageText: widget.pangeaMessageEvent.messageDisplayText,
|
|
|
|
tokensWithXP: await targetTokensController.targetTokens(
|
|
|
|
tokensWithXP: await widget.targetTokensController.targetTokens(
|
|
|
|
widget.pangeaMessageEvent,
|
|
|
|
widget.pangeaMessageEvent,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
messageId: widget.pangeaMessageEvent.eventId,
|
|
|
|
messageId: widget.pangeaMessageEvent.eventId,
|
|
|
|
@ -151,7 +149,8 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
|
|
|
|
.map((activity) => activity.activityRequestMetaData)
|
|
|
|
.map((activity) => activity.activityRequestMetaData)
|
|
|
|
.toList(),
|
|
|
|
.toList(),
|
|
|
|
activityQualityFeedback: activityFeedback,
|
|
|
|
activityQualityFeedback: activityFeedback,
|
|
|
|
clientCompatibleActivities: widget.tts.isLanguageFullySupported
|
|
|
|
clientCompatibleActivities: widget
|
|
|
|
|
|
|
|
.ttsController.isLanguageFullySupported
|
|
|
|
? ActivityTypeEnum.values
|
|
|
|
? ActivityTypeEnum.values
|
|
|
|
: ActivityTypeEnum.values
|
|
|
|
: ActivityTypeEnum.values
|
|
|
|
.where((type) => type != ActivityTypeEnum.wordFocusListening)
|
|
|
|
.where((type) => type != ActivityTypeEnum.wordFocusListening)
|
|
|
|
@ -221,7 +220,7 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
|
|
|
|
|
|
|
|
|
|
|
|
// update the target tokens with the new construct uses
|
|
|
|
// update the target tokens with the new construct uses
|
|
|
|
// NOTE - multiple choice activity is handling adding these to analytics
|
|
|
|
// NOTE - multiple choice activity is handling adding these to analytics
|
|
|
|
await targetTokensController.updateTokensWithConstructs(
|
|
|
|
await widget.targetTokensController.updateTokensWithConstructs(
|
|
|
|
currentCompletionRecord!.usesForAllResponses(
|
|
|
|
currentCompletionRecord!.usesForAllResponses(
|
|
|
|
currentActivity!,
|
|
|
|
currentActivity!,
|
|
|
|
metadata,
|
|
|
|
metadata,
|
|
|
|
@ -320,7 +319,7 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
|
|
|
|
return MultipleChoiceActivity(
|
|
|
|
return MultipleChoiceActivity(
|
|
|
|
practiceCardController: this,
|
|
|
|
practiceCardController: this,
|
|
|
|
currentActivity: currentActivity!,
|
|
|
|
currentActivity: currentActivity!,
|
|
|
|
tts: widget.tts,
|
|
|
|
tts: widget.ttsController,
|
|
|
|
eventID: widget.pangeaMessageEvent.eventId,
|
|
|
|
eventID: widget.pangeaMessageEvent.eventId,
|
|
|
|
);
|
|
|
|
);
|
|
|
|
case ActivityTypeEnum.wordFocusListening:
|
|
|
|
case ActivityTypeEnum.wordFocusListening:
|
|
|
|
@ -329,7 +328,7 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
|
|
|
|
return MultipleChoiceActivity(
|
|
|
|
return MultipleChoiceActivity(
|
|
|
|
practiceCardController: this,
|
|
|
|
practiceCardController: this,
|
|
|
|
currentActivity: currentActivity!,
|
|
|
|
currentActivity: currentActivity!,
|
|
|
|
tts: widget.tts,
|
|
|
|
tts: widget.ttsController,
|
|
|
|
eventID: widget.pangeaMessageEvent.eventId,
|
|
|
|
eventID: widget.pangeaMessageEvent.eventId,
|
|
|
|
);
|
|
|
|
);
|
|
|
|
// default:
|
|
|
|
// default:
|
|
|
|
|