import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'file:///C:/Users/admin/AndroidStudioProjects/doctor_app_flutter/lib/core/model/referral/MyReferralPatientModel.dart'; import 'package:doctor_app_flutter/core/provider/robot_provider.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/speech-text-popup.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart'; import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_to_text.dart' as stt; class AddReplayOnReferralPatient extends StatefulWidget { final PatientReferralViewModel patientReferralViewModel; final MyReferralPatientModel myReferralInPatientModel; const AddReplayOnReferralPatient( {Key key, this.patientReferralViewModel, this.myReferralInPatientModel}) : super(key: key); @override _AddReplayOnReferralPatientState createState() => _AddReplayOnReferralPatientState(); } class _AddReplayOnReferralPatientState extends State { bool isSubmitted = false; stt.SpeechToText speech = stt.SpeechToText(); var reconizedWord; var event = RobotProvider(); TextEditingController replayOnReferralController = TextEditingController(); @override void initState() { requestPermissions(); super.initState(); } @override Widget build(BuildContext context) { return AppScaffold( isShowAppBar: false, backgroundColor: Theme.of(context).scaffoldBackgroundColor, body: SingleChildScrollView( child: Container( height: MediaQuery.of(context).size.height * 1.0, child: Padding( padding: EdgeInsets.all(0.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ BottomSheetTitle(title: 'Replay'), SizedBox( height: 10.0, ), Center( child: FractionallySizedBox( widthFactor: 0.9, child: Column( children: [ Stack( children: [ AppTextFieldCustom( hintText: 'Replay your responses here', controller: replayOnReferralController, maxLines: 35, minLines: 25, hasBorder: true, validationError: replayOnReferralController.text.isEmpty && isSubmitted ? TranslationBase.of(context).emptyMessage : null, ), Positioned( top: 0, //MediaQuery.of(context).size.height * 0, right: 15, child: IconButton( icon: Icon( DoctorApp.speechtotext, color: Colors.black, size: 35, ), onPressed: () { onVoiceText(); }, ), ) ], ), ], ), ), ), ], ), ), ), ), bottomSheet: Container( height: replayOnReferralController.text.isNotEmpty ? 130 : 70, margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), child: Column( children: [ replayOnReferralController.text.isEmpty ? SizedBox() : Container( margin: EdgeInsets.all(5), child: Expanded( child: AppButton( title: TranslationBase.of(context).clearText, onPressed: () { setState(() { replayOnReferralController.text = ''; }); }, )), ), Container( margin: EdgeInsets.all(5), child: AppButton( title: 'Submit Replay', color: Color(0xff359846), fontWeight: FontWeight.w700, onPressed: () async { setState(() { isSubmitted = true; }); if (replayOnReferralController.text.isNotEmpty) { GifLoaderDialogUtils.showMyDialog(context); await widget.patientReferralViewModel.replay( replayOnReferralController.text.trim(), widget.myReferralInPatientModel); if (widget.patientReferralViewModel.state == ViewState.ErrorLocal) { Helpers.showErrorToast( widget.patientReferralViewModel.error); } else { GifLoaderDialogUtils.hideDialog(context); DrAppToastMsg.showSuccesToast( "Your Replay Added Successfully"); Navigator.of(context).pop(); Navigator.of(context).pop(); } } else { Helpers.showErrorToast("You can't add empty replay"); setState(() { isSubmitted = false; }); } })), ], ), ), ); } onVoiceText() async { new SpeechToText(context: context).showAlertDialog(context); var lang = TranslationBase.of(AppGlobal.CONTEX).locale.languageCode; bool available = await speech.initialize( onStatus: statusListener, onError: errorListener); if (available) { speech.listen( onResult: resultListener, // listenMode: ListenMode.confirmation, localeId: lang == 'en' ? 'en-US' : 'ar-SA', ); } else { print("The user has denied the use of speech recognition."); } } void errorListener(SpeechRecognitionError error) {} void statusListener(String status) { reconizedWord = status == 'listening' ? 'Lisening...' : 'Sorry....'; } void requestPermissions() async { Map statuses = await [ Permission.microphone, ].request(); } void resultListener(result) { reconizedWord = result.recognizedWords; event.setValue({"searchText": reconizedWord}); if (result.finalResult == true) { setState(() { SpeechToText.closeAlertDialog(context); replayOnReferralController.text += reconizedWord + '\n'; }); } } }