diff --git a/Conjuga/Conjuga/Views/Practice/Vocab/VocabFlashcardPracticeView.swift b/Conjuga/Conjuga/Views/Practice/Vocab/VocabFlashcardPracticeView.swift index 66ec806..2737817 100644 --- a/Conjuga/Conjuga/Views/Practice/Vocab/VocabFlashcardPracticeView.swift +++ b/Conjuga/Conjuga/Views/Practice/Vocab/VocabFlashcardPracticeView.swift @@ -20,6 +20,7 @@ struct VocabFlashcardPracticeView: View { @State private var revealed: Bool = false @State private var exampleByVerbId: [Int: VerbExample] = [:] @State private var generatingExampleForVerbId: Int? = nil + @State private var speech = SpeechService() private var cloudContext: ModelContext { cloudModelContextProvider() } @@ -100,9 +101,21 @@ struct VocabFlashcardPracticeView: View { private func revealedContent(_ verb: Verb) -> some View { VStack(spacing: 18) { - Text(verb.infinitive) - .font(.title.weight(.semibold)) - .multilineTextAlignment(.center) + HStack(spacing: 12) { + Text(verb.infinitive) + .font(.title.weight(.semibold)) + .multilineTextAlignment(.center) + + Button { + speech.speak(verb.infinitive) + } label: { + Image(systemName: "speaker.wave.2.fill") + .font(.title3) + .padding(10) + } + .glassEffect(in: .circle) + .accessibilityLabel("Say it out loud") + } exampleBlock(for: verb) diff --git a/Conjuga/Conjuga/Views/Practice/Vocab/VocabMultipleChoicePracticeView.swift b/Conjuga/Conjuga/Views/Practice/Vocab/VocabMultipleChoicePracticeView.swift index 2ff7f6a..957e2fa 100644 --- a/Conjuga/Conjuga/Views/Practice/Vocab/VocabMultipleChoicePracticeView.swift +++ b/Conjuga/Conjuga/Views/Practice/Vocab/VocabMultipleChoicePracticeView.swift @@ -19,6 +19,7 @@ struct VocabMultipleChoicePracticeView: View { @State private var selectedOption: Verb? = nil @State private var exampleByVerbId: [Int: VerbExample] = [:] @State private var generatingExampleForVerbId: Int? = nil + @State private var speech = SpeechService() private var cloudContext: ModelContext { cloudModelContextProvider() } @@ -109,9 +110,21 @@ struct VocabMultipleChoicePracticeView: View { Text(correct ? "Correct!" : "Not quite") .font(.headline) .foregroundStyle(correct ? .green : .red) - Text(verb.infinitive) - .font(.title2.weight(.semibold)) - .padding(.top, 4) + HStack(spacing: 10) { + Text(verb.infinitive) + .font(.title2.weight(.semibold)) + + Button { + speech.speak(verb.infinitive) + } label: { + Image(systemName: "speaker.wave.2.fill") + .font(.body) + .padding(8) + } + .glassEffect(in: .circle) + .accessibilityLabel("Say it out loud") + } + .padding(.top, 4) } }