import 'dart:io'; import 'package:siro_rider/constant/box_name.dart'; import 'package:flutter/material.dart'; import 'package:flutter_tts/flutter_tts.dart'; import 'package:get/get.dart'; import '../../main.dart'; class TextToSpeechController extends GetxController { final flutterTts = FlutterTts(); @override void onInit() { super.onInit(); initTts(); } @override void onClose() { flutterTts.stop(); // Stop any ongoing TTS super.onClose(); } // Initialize TTS engine with language check Future initTts() async { try { String langCode = box.read(BoxName.lang) ?? 'ar-SA'; if (langCode == 'ar') langCode = 'ar-SA'; if (langCode == 'en') langCode = 'en-US'; bool isAvailable = await flutterTts.isLanguageAvailable(langCode); if (!isAvailable) langCode = 'en-US'; await flutterTts.setLanguage(langCode); await flutterTts.setSpeechRate(0.5); await flutterTts.setVolume(1.0); if (Platform.isIOS) { await flutterTts.setIosAudioCategory( IosTextToSpeechAudioCategory.playback, [ IosTextToSpeechAudioCategoryOptions.mixWithOthers, IosTextToSpeechAudioCategoryOptions.duckOthers, ], ); } } catch (error) { print('TTS Init Error: $error'); } } // Function to speak the given text (stops current speech first) Future speakText(String text) async { if (text.isEmpty) return; try { await flutterTts.stop(); await flutterTts.speak(text); } catch (error) { print('Failed to speak text: $error'); } } }