import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/BookingOptions.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/Search.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart'; import 'package:diplomaticquarterapp/pages/medical/my_admissions_page.dart'; import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart'; import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_tts/flutter_tts.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_recognition_result.dart'; import 'package:speech_to_text/speech_to_text.dart'; import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart'; import 'dart:math'; import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; class SearchBot with ChangeNotifier { SearchBot() { requestPermissions(); initSpeechState(); } SearchProvider searchProvider = new SearchProvider(); // RobotProvider eventProvider = RobotProvider(); bool isLoading = false; bool isError = false; final SpeechToText speech = SpeechToText(); String error = ''; String _currentLocaleId = ""; String lastError; double level = 0.0; double minSoundLevel = 50000; double maxSoundLevel = -50000; String reconizedWord = ''; FlutterTts flutterTts = FlutterTts(); var selectedLang; bool isSearching = false; String lastStatus; bool _isInit = true; // @override // void didChangeDependencies() { // super.didChangeDependencies(); // if (_isInit) { // } else { // startVoiceSearch(); // } // _isInit = false; // } //@override // Widget build(BuildContext context) { // return Column( // children: [ // Image.asset('assets/images/siri-ianzhao.gif'), // AppText( // reconizedWord, // fontSize: 28, // ), // // SizedBox( // // child: FlatButton( // // child: Text('Start'), // // onPressed: () { // // setState(() { // // reconizedWord = 'Lisening...'; // // }); // // }, // // ), // // height: 40, // // width: 80) // ], // ); // } startVoiceSearch() async { speech.listen( onResult: resultListener, listenFor: Duration(seconds: 10), localeId: _currentLocaleId, onSoundLevelChange: soundLevelListener, cancelOnError: true, partialResults: true, onDevice: true, listenMode: ListenMode.confirmation); } void resultListener(SpeechRecognitionResult result) { // lastWords = "${result.recognizedWords} - ${result.finalResult}"; if (result.finalResult == true) { // setState(() { reconizedWord = result.recognizedWords; //}); Future.delayed(const Duration(seconds: 1), () { _speak(reconizedWord); }); } //}); } Future _speak(reconizedWord) async { await flutterTts.speak(reconizedWord); getPages(reconizedWord); } void soundLevelListener(double level) { minSoundLevel = min(minSoundLevel, level); maxSoundLevel = max(maxSoundLevel, level); // print("sound level $level: $minSoundLevel - $maxSoundLevel "); //setState(() { this.level = level; // }); } void requestPermissions() async { Map statuses = await [ Permission.microphone, ].request(); } Future initSpeechState() async { await speech.initialize(onError: errorListener, onStatus: statusListener); _currentLocaleId = TranslationBase.of(AppGlobal.context).locale.languageCode == 'en' ? 'en-GB' : 'ar-SA'; // systemLocale.localeId; flutterTts.setLanguage(_currentLocaleId); await flutterTts.speak("Hello! How May I help you?"); flutterTts.setCompletionHandler(() { startVoiceSearch(); }); // if (!mounted) return; } void errorListener(SpeechRecognitionError error) { //setState(() { // reconizedWord = "${error.errorMsg} - ${error.permanent}"; //}); } void statusListener(String status) { //setState(() { reconizedWord = status == 'listening' ? 'Lisening...' : 'Sorry....'; //}); } getPages(text) { var request = { 'VoiceMessage': text, 'Lang': TranslationBase.of(AppGlobal.context).locale.languageCode == 'en' ? 'En' : 'Ar' }; searchProvider.getBotPages(request).then((value) => {}); //getCommands(value['Response'], value['Understand']) } getCommands(result, understand) async { //RoboSearch.closeAlertDialog(context); print(result); switch (result["CommandNumber"]) { case '100': Navigator.push( AppGlobal.context, FadePage( page: BookingOptions( isAppbar: true, ))); break; case '101': Navigator.push( AppGlobal.context, MaterialPageRoute( builder: (context) => Search( type: 0, ))); break; case '102': Navigator.push( AppGlobal.context, MaterialPageRoute( builder: (context) => Search( type: 1, ))); break; // case '103': // eventProvider.setValue({"clinic_id": understand}); // break; // case '104': // eventProvider.setValue({"project_id": understand}); // break; // case '105': // eventProvider.setValue({"doctor_id": understand}); // break; default: { //eventProvider.setValue({"doctor_id": '40036'}); //eventProvider.setValue(); // if (result['CommandNumber'] == '0') { // searchProvider.setData(understand); // } } break; } if (_currentLocaleId == 'en-GB') { await flutterTts.speak(result['ResponseEn']); } else { await flutterTts.speak(result['ResponseAr']); } //searchProvider.setLisener(result); } }