Merge pull request #5240 from pangeachat/5210-add-transcriptionaudio-to-practice
feat: add transcript in vocab practice view
This commit is contained in:
commit
5044e070da
2 changed files with 38 additions and 7 deletions
|
|
@ -22,6 +22,7 @@ import 'package:fluffychat/pangea/practice_activities/multiple_choice_activity_m
|
|||
import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart';
|
||||
import 'package:fluffychat/pangea/practice_activities/practice_generation_repo.dart';
|
||||
import 'package:fluffychat/pangea/practice_activities/practice_target.dart';
|
||||
import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart';
|
||||
import 'package:fluffychat/pangea/vocab_practice/vocab_practice_session_model.dart';
|
||||
import 'package:fluffychat/pangea/vocab_practice/vocab_practice_session_repo.dart';
|
||||
import 'package:fluffychat/pangea/vocab_practice/vocab_practice_view.dart';
|
||||
|
|
@ -258,6 +259,12 @@ class VocabPracticeState extends State<VocabPractice> with AnalyticsUpdater {
|
|||
activityState.value = const AsyncState.loading();
|
||||
final nextActivityCompleter = _queue.removeFirst();
|
||||
activityConstructId.value = nextActivityCompleter.key;
|
||||
TtsController.tryToSpeak(
|
||||
nextActivityCompleter.key.lemma,
|
||||
langCode:
|
||||
MatrixState.pangeaController.userController.userL2!.langCode,
|
||||
);
|
||||
|
||||
final activity = await nextActivityCompleter.value.future;
|
||||
activityState.value = AsyncState.loaded(activity);
|
||||
}
|
||||
|
|
@ -276,12 +283,16 @@ class VocabPracticeState extends State<VocabPractice> with AnalyticsUpdater {
|
|||
|
||||
try {
|
||||
activityState.value = const AsyncState.loading();
|
||||
|
||||
final req = requests.first;
|
||||
activityConstructId.value = req.targetTokens.first.vocabConstructID;
|
||||
TtsController.tryToSpeak(
|
||||
req.targetTokens.first.vocabConstructID.lemma,
|
||||
langCode: MatrixState.pangeaController.userController.userL2!.langCode,
|
||||
);
|
||||
|
||||
final res = await _fetchActivity(req);
|
||||
if (!mounted) return;
|
||||
|
||||
activityConstructId.value = req.targetTokens.first.vocabConstructID;
|
||||
activityState.value = AsyncState.loaded(res);
|
||||
} catch (e) {
|
||||
if (!mounted) return;
|
||||
|
|
@ -397,6 +408,11 @@ class VocabPracticeState extends State<VocabPractice> with AnalyticsUpdater {
|
|||
await _saveSession();
|
||||
if (!correct) return;
|
||||
|
||||
TtsController.tryToSpeak(
|
||||
activity.targetTokens.first.vocabConstructID.lemma,
|
||||
langCode: MatrixState.pangeaController.userController.userL2!.langCode,
|
||||
);
|
||||
|
||||
// Display the fact that the choice was correct before loading the next activity
|
||||
await Future.delayed(const Duration(milliseconds: 1000));
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import 'package:fluffychat/pangea/common/utils/async_state.dart';
|
|||
import 'package:fluffychat/pangea/common/widgets/error_indicator.dart';
|
||||
import 'package:fluffychat/pangea/instructions/instructions_enum.dart';
|
||||
import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart';
|
||||
import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_widget.dart';
|
||||
import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart';
|
||||
import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart';
|
||||
import 'package:fluffychat/pangea/vocab_practice/choice_cards/audio_choice_card.dart';
|
||||
|
|
@ -17,6 +18,7 @@ import 'package:fluffychat/pangea/vocab_practice/vocab_practice_page.dart';
|
|||
import 'package:fluffychat/pangea/vocab_practice/vocab_practice_session_model.dart';
|
||||
import 'package:fluffychat/pangea/vocab_practice/vocab_timer_widget.dart';
|
||||
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
||||
class VocabPracticeView extends StatelessWidget {
|
||||
final VocabPracticeState controller;
|
||||
|
|
@ -123,13 +125,26 @@ class _VocabActivityView extends StatelessWidget {
|
|||
child: ValueListenableBuilder(
|
||||
valueListenable: controller.activityConstructId,
|
||||
builder: (context, constructId, __) => constructId != null
|
||||
? Text(
|
||||
constructId.lemma,
|
||||
textAlign: TextAlign.center,
|
||||
style:
|
||||
Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||
? Column(
|
||||
spacing: 12.0,
|
||||
children: [
|
||||
Text(
|
||||
constructId.lemma,
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.titleLarge
|
||||
?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
PhoneticTranscriptionWidget(
|
||||
text: constructId.lemma,
|
||||
textLanguage: MatrixState
|
||||
.pangeaController.userController.userL2!,
|
||||
style: const TextStyle(fontSize: 14.0),
|
||||
),
|
||||
],
|
||||
)
|
||||
: const SizedBox(),
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue