diff --git a/lib/config/shared_pref_kay.dart b/lib/config/shared_pref_kay.dart index 61e36022..d987ef96 100644 --- a/lib/config/shared_pref_kay.dart +++ b/lib/config/shared_pref_kay.dart @@ -14,3 +14,4 @@ const FAMILY_FILE = 'family-file'; const USER_LAT = 'user-lat'; const USER_LONG = 'user-long'; const IS_GO_TO_PARKING = 'IS_GO_TO_PARKING'; +const IS_SEARCH_APPO = 'is-search-appo'; diff --git a/lib/pages/MyAppointments/MyAppointments.dart b/lib/pages/MyAppointments/MyAppointments.dart index aa0e7d98..379c6e71 100644 --- a/lib/pages/MyAppointments/MyAppointments.dart +++ b/lib/pages/MyAppointments/MyAppointments.dart @@ -1,7 +1,9 @@ +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/models/AppointmentType.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/AppointmentCardView.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart'; @@ -30,7 +32,7 @@ class _MyAppointmentsState extends State TabController _tabController; bool isDataLoaded = false; - + var sharedPref = new AppSharedPreferences(); @override void initState() { _tabController = new TabController(length: 3, vsync: this); @@ -203,14 +205,24 @@ class _MyAppointmentsState extends State }); } - openAppointmentsTab() { - if (widget._patientBookedAppointmentListHospital.length != 0) { + openAppointmentsTab() async { + var flag = await this.sharedPref.getInt(IS_SEARCH_APPO); + + if (flag == 1) { _tabController.index = 0; - } else if (widget._patientConfirmedAppointmentListHospital.length != 0) { + } else if (flag == 2) { _tabController.index = 1; - } else if (widget._patientArrivedAppointmentListHospital.length != 0) { + } else if (flag == 3) { _tabController.index = 2; - return; + } else { + if (widget._patientBookedAppointmentListHospital.length != 0) { + _tabController.index = 0; + } else if (widget._patientConfirmedAppointmentListHospital.length != 0) { + _tabController.index = 1; + } else if (widget._patientArrivedAppointmentListHospital.length != 0) { + _tabController.index = 2; + return; + } } } diff --git a/lib/pages/login/confirm-login.dart b/lib/pages/login/confirm-login.dart index cc3ed1e8..5b4124b4 100644 --- a/lib/pages/login/confirm-login.dart +++ b/lib/pages/login/confirm-login.dart @@ -22,6 +22,7 @@ import 'package:flutter/services.dart'; import 'package:intl/intl.dart'; import 'package:local_auth/local_auth.dart'; import 'package:smart_progress_bar/smart_progress_bar.dart'; + class ConfirmLogin extends StatefulWidget { @override _ConfirmLogin createState() => _ConfirmLogin(); @@ -74,182 +75,170 @@ class _ConfirmLogin extends State { return AppScaffold( appBarTitle: TranslationBase.of(context).confirm, isShowAppBar: true, - body: SingleChildScrollView( - child: Container( - padding: EdgeInsets.all(20), - height: SizeConfig.realScreenHeight * .9, - width: SizeConfig.realScreenWidth, - child: Column( - children: [ - Expanded( - flex: 3, - child: user != null && isMoreOption == false - ? Column( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Image.asset( - 'assets/images/habib-logo.png', - height: 80, - width: 80, - ), - AppText( - TranslationBase.of(context) - .welcomeBack + - ' ' + - user.name, - fontSize: SizeConfig.textMultiplier * 3.5, - ), - AppText( - TranslationBase.of(context).accountInfo, - fontSize: SizeConfig.textMultiplier * 2.5, - ), - Card( - color: Colors.grey[300], - child: Row( - children: [ - Expanded( - child: ListTile( - title: Text( - TranslationBase.of(context) - .lastLoginAt, - textAlign: TextAlign.center, - ), - subtitle: Text( - user.editedOn != null - ? formatDate(DateUtil - .convertStringToDate( - user.editedOn)) - : '--', - textAlign: - TextAlign.center), - )), - Expanded( - child: ListTile( - title: Text( - TranslationBase.of(context) - .lastLoginWith, - textAlign: - TextAlign.center), - subtitle: Text( - getType(user.logInType, - context), - textAlign: - TextAlign.center), - )) - ], - )) - ], - ) - : Column( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Image.asset( - 'assets/images/habib-logo.png', - height: 80, - width: 80, - ), - this.onlySMSBox == false - ? AppText( - TranslationBase.of(context) - .verifyLoginWith, - fontSize: - SizeConfig.textMultiplier * - 3.5, - textAlign: TextAlign.left, - ) - : AppText( + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.all(20), + height: SizeConfig.realScreenHeight * .9, + width: SizeConfig.realScreenWidth, + child: Column( + children: [ + Expanded( + flex: 3, + child: user != null && isMoreOption == false + ? Column( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + 'assets/images/habib-logo.png', + height: 80, + width: 80, + ), + AppText( + TranslationBase.of(context).welcomeBack + + ' ' + + user.name, + fontSize: SizeConfig.textMultiplier * 3.5, + ), + AppText( + TranslationBase.of(context).accountInfo, + fontSize: SizeConfig.textMultiplier * 2.5, + ), + Card( + color: Colors.grey[300], + child: Row( + children: [ + Expanded( + child: ListTile( + title: Text( + TranslationBase.of(context) + .lastLoginAt, + textAlign: TextAlign.center, + ), + subtitle: Text( + user.editedOn != null + ? formatDate(DateUtil + .convertStringToDate( + user.editedOn)) + : '--', + textAlign: TextAlign.center), + )), + Expanded( + child: ListTile( + title: Text( TranslationBase.of(context) - .verifyFingerprint2, - fontSize: - SizeConfig.textMultiplier * - 2.5, - textAlign: TextAlign.left, - ), - ])), - user != null && isMoreOption == false - ? Expanded( - flex: 2, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Row( + .lastLoginWith, + textAlign: TextAlign.center), + subtitle: Text( + getType( + user.logInType, context), + textAlign: TextAlign.center), + )) + ], + )) + ], + ) + : Column( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + 'assets/images/habib-logo.png', + height: 80, + width: 80, + ), + this.onlySMSBox == false + ? AppText( + TranslationBase.of(context) + .verifyLoginWith, + fontSize: + SizeConfig.textMultiplier * 3.5, + textAlign: TextAlign.left, + ) + : AppText( + TranslationBase.of(context) + .verifyFingerprint2, + fontSize: + SizeConfig.textMultiplier * 2.5, + textAlign: TextAlign.left, + ), + ])), + user != null && isMoreOption == false + ? Expanded( + flex: 2, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Expanded( + child: InkWell( + onTap: () => { + authenticateUser( + 3, + BiometricType + .face.index) + }, + child: + getButton(user.logInType))), + Expanded(child: getButton(5)) + ]) + ])) + : Expanded( + flex: 4, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + onlySMSBox == false + ? Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Expanded( - child: InkWell( - onTap: () => { - authenticateUser( - 3, - BiometricType - .face.index) - }, - child: getButton( - user.logInType))), - Expanded(child: getButton(5)) - ]) - ])) - : Expanded( - flex: 4, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, + Expanded(child: getButton(3)), + Expanded(child: getButton(2)) + ], + ) + : SizedBox(), + Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - onlySMSBox == false - ? Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Expanded(child: getButton(3)), - Expanded(child: getButton(2)) - ], - ) - : SizedBox(), - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Expanded(child: getButton(1)), - Expanded(child: getButton(4)) - ], - ), - ]), - ), - Expanded( - flex: 1, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - user != null - ? Row( - children: [ - Expanded( - child: DefaultButton( - TranslationBase.of(context) - .useAnotherAccount, - () => { - Navigator.of(context).pushNamed( - LOGIN_TYPE, - ) - }, - )), - ], - ) - : SizedBox(), - ], - )) - ], - ))) - ); + Expanded(child: getButton(1)), + Expanded(child: getButton(4)) + ], + ), + ]), + ), + Expanded( + flex: 1, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + user != null + ? Row( + children: [ + Expanded( + child: DefaultButton( + TranslationBase.of(context) + .useAnotherAccount, + () => { + Navigator.of(context).pushNamed( + LOGIN_TYPE, + ) + }, + )), + ], + ) + : SizedBox(), + ], + )) + ], + )))); } Future _getAvailableBiometrics() async { @@ -313,38 +302,39 @@ class _ConfirmLogin extends State { var request = CheckPatientAuthenticationReq.fromJson(req.toJson()); sharedPref.setObject(REGISTER_DATA_FOR_REGISTER, request); - authService.checkPatientAuthentication(request).then((value) => { - if (value['isSMSSent']) - { - sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']), - this.loginTokenID = value['LogInTokenID'], - sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, request), - // Future.delayed(Duration(seconds: 1), () { - this.sendActivationCode(type) - // }) - } - else - { - if (value['IsAuthenticated']) {this.checkActivationCode()} - } - }).catchError((err) { + authService + .checkPatientAuthentication(request) + .then((value) => { + if (value['isSMSSent']) + { + sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']), + this.loginTokenID = value['LogInTokenID'], + sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, request), + // Future.delayed(Duration(seconds: 1), () { + this.sendActivationCode(type) + // }) + } + else + { + if (value['IsAuthenticated']) {this.checkActivationCode()} + } + }) + .catchError((err) { print(err); }).showProgressBar( - text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); + text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); } - sendActivationCode(type) { + sendActivationCode(type) async { var request = this.getCommonRequest(); - // loading(true); - this.authService.sendActivationCode(request).then((result) => { - if (result != null && result['isSMSSent'] == true) - {loading(false), this.startSMSService(type)} - else - {loading(false)} - }).catchError((err) { - print(err); - }).showProgressBar( - text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); + // loading(true); + + await this.authService.sendActivationCode(request).then((result) => { + if (result != null && result['isSMSSent'] == true) + {this.startSMSService(type)} + }); + + // SMSOTP.showLoadingDialog(context, false), } @@ -376,45 +366,50 @@ class _ConfirmLogin extends State { } getMobileInfo(request) { - this.authService.getLoginInfo(request).then((result) => { - if (result['SMSLoginRequired'] == false) - { - this.loginTokenID = result.logInTokenID, - this.patientOutSA = result.patientOutSA, - // sms for register the biometric - if (result.isSMSSent) + this + .authService + .getLoginInfo(request) + .then((result) => { + if (result['SMSLoginRequired'] == false) { - this.onlySMSBox = false, - //this.button(); + this.loginTokenID = result.logInTokenID, + this.patientOutSA = result.patientOutSA, + // sms for register the biometric + if (result.isSMSSent) + { + this.onlySMSBox = false, + //this.button(); + } + else + {checkActivationCode()} } else - {checkActivationCode()} - } - else - { - if (result['IsAuthenticated'] == true) { - setState(() { - isMoreOption = true; - this.onlySMSBox = true; - // this.fingrePrintBefore = true; - }), - - //sharedPref.setBool(ONLY_SMS, true), - // this.cs.sharedService.setSharedData(true, AuthenticationService.ONLY_SMS); - //this.cs.sharedService.setSharedData(this.selectedOption, AuthenticationService.FINGUREPRINT_BEFORE); - // this.cs.confirmLogin(); - //this.button(); + if (result['IsAuthenticated'] == true) + { + setState(() { + isMoreOption = true; + this.onlySMSBox = true; + // this.fingrePrintBefore = true; + }), + + //sharedPref.setBool(ONLY_SMS, true), + // this.cs.sharedService.setSharedData(true, AuthenticationService.ONLY_SMS); + //this.cs.sharedService.setSharedData(this.selectedOption, AuthenticationService.FINGUREPRINT_BEFORE); + // this.cs.confirmLogin(); + //this.button(); + } + // else + // { + // // this.cs.presentAlert(result.ErrorEndUserMessage); + // } } - // else - // { - // // this.cs.presentAlert(result.ErrorEndUserMessage); - // } - } - }).catchError((err) { + }) + .catchError((err) { print(err); }).showProgressBar( - text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));; + text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); + ; } setUser() async {} @@ -435,9 +430,13 @@ class _ConfirmLogin extends State { : int.parse(this.user.mobile); this.zipCode = this.registerd_data != null ? this.registerd_data.zipCode - : this.user.outSA == true ? "971" : "966"; + : this.user.outSA == true + ? "971" + : "966"; this.patientOutSA = this.registerd_data != null - ? this.registerd_data.zipCode == "966" ? 0 : 1 + ? this.registerd_data.zipCode == "966" + ? 0 + : 1 : this.user.outSA; if (this.registerd_data != null) { this.loginTokenID = await sharedPref.getString(LOGIN_TOKEN_ID); @@ -485,46 +484,51 @@ class _ConfirmLogin extends State { SMSOTP.showLoadingDialog(context, true); var request = this.getCommonRequest().toJson(); - this.authService.checkActivationCode(request, value).then((result) => { - if (result is Map) - { - result = CheckActivationCode.fromJson(result), - if (this.registerd_data != null && - this.registerd_data.isRegister == true) + this + .authService + .checkActivationCode(request, value) + .then((result) => { + if (result is Map) { - Navigator.of(context).pushNamed( - REGISTER_INFO, - ) + result = CheckActivationCode.fromJson(result), + if (this.registerd_data != null && + this.registerd_data.isRegister == true) + { + Navigator.of(context).pushNamed( + REGISTER_INFO, + ) + } + else + { + this.userData = result + .list, //AuthenticatedUser.fromJson(result['List'][0]), + this.sharedPref.setObject(USER_PROFILE, result.list), + this.loginTokenID = result.logInTokenID, + this + .sharedPref + .setObject(LOGIN_TOKEN_ID, result.logInTokenID), + this + .sharedPref + .setString(TOKEN, result.authenticationTokenID), + this.checkIfUserAgreedBefore(result), + // Navigator.of(context).pop(), + SMSOTP.showLoadingDialog(context, false), + } } else { - this.userData = result - .list, //AuthenticatedUser.fromJson(result['List'][0]), - this.sharedPref.setObject(USER_PROFILE, result.list), - this.loginTokenID = result.logInTokenID, - this - .sharedPref - .setObject(LOGIN_TOKEN_ID, result.logInTokenID), - this - .sharedPref - .setString(TOKEN, result.authenticationTokenID), - this.checkIfUserAgreedBefore(result), // Navigator.of(context).pop(), SMSOTP.showLoadingDialog(context, false), + Future.delayed(Duration(seconds: 1), () { + AppToast.showErrorToast(message: result); + }), } - } - else - { - // Navigator.of(context).pop(), - SMSOTP.showLoadingDialog(context, false), - Future.delayed(Duration(seconds: 1), () { - AppToast.showErrorToast(message: result); - }), - } - }).catchError((err) { + }) + .catchError((err) { print(err); }).showProgressBar( - text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));; + text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); + ; } checkIfUserAgreedBefore(CheckActivationCode result) { @@ -537,7 +541,10 @@ class _ConfirmLogin extends State { } insertIMEI() { - authService.insertDeviceImei(selectedOption).then((value) => {goToHome()}).catchError((err) { + authService + .insertDeviceImei(selectedOption) + .then((value) => {goToHome()}) + .catchError((err) { print(err); }); } @@ -545,7 +552,6 @@ class _ConfirmLogin extends State { goToHome() { // authService.insertDeviceImei().then((value) => print(value)); Navigator.of(context).pushNamed(HOME); - } loading(flag) { diff --git a/lib/services/authentication/auth_provider.dart b/lib/services/authentication/auth_provider.dart index 1598184c..6d8c00e2 100644 --- a/lib/services/authentication/auth_provider.dart +++ b/lib/services/authentication/auth_provider.dart @@ -156,19 +156,15 @@ class AuthProvider with ChangeNotifier { request.generalid = GENERAL_ID; request.languageID = LANGUAGE_ID; request.patientOutSA = request.zipCode == '966' ? 0 : 1; - try { - dynamic localRes; - await new BaseAppClient().post(CHECK_PATIENT_AUTH, - onSuccess: (dynamic response, int statusCode) { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request.toJson()); - return Future.value(localRes); - } catch (error) { - print(error); + + dynamic localRes; + await new BaseAppClient().post(CHECK_PATIENT_AUTH, + onSuccess: (dynamic response, int statusCode) { + localRes = response; + }, onFailure: (String error, int statusCode) { throw error; - } + }, body: request.toJson()); + return Future.value(localRes); } Future getLoginInfo(request) async { @@ -180,19 +176,15 @@ class AuthProvider with ChangeNotifier { request.deviceTypeID = DeviceTypeID; request.patientOutSA = request.zipCode == '966' ? 0 : 1; request.isDentalAllowedBackend = false; - try { - dynamic localRes; - await new BaseAppClient().post(GET_MOBILE_INFO, - onSuccess: (dynamic response, int statusCode) { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request.toJson()); - return Future.value(localRes); - } catch (error) { - print(error); + + dynamic localRes; + await new BaseAppClient().post(GET_MOBILE_INFO, + onSuccess: (dynamic response, int statusCode) { + localRes = response; + }, onFailure: (String error, int statusCode) { throw error; - } + }, body: request.toJson()); + return Future.value(localRes); } Future sendActivationCode(request) async { @@ -204,20 +196,16 @@ class AuthProvider with ChangeNotifier { request.deviceTypeID = DeviceTypeID; request.patientOutSA = request.zipCode == '966' ? 0 : 1; request.isDentalAllowedBackend = false; - try { - dynamic localRes; - await new BaseAppClient().post(SEND_ACTIVATION_CODE, - onSuccess: (dynamic response, int statusCode) { - localRes = response; - authenticatedUser = CheckActivationCode.fromJson(localRes); - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request.toJson()); - return Future.value(localRes); - } catch (error) { - print(error); + + dynamic localRes; + await new BaseAppClient().post(SEND_ACTIVATION_CODE, + onSuccess: (dynamic response, int statusCode) { + localRes = response; + authenticatedUser = CheckActivationCode.fromJson(localRes); + }, onFailure: (String error, int statusCode) { throw error; - } + }, body: request.toJson()); + return Future.value(localRes); } Future checkActivationCode(request, [value]) async { diff --git a/lib/widgets/drawer/app_drawer_widget.dart b/lib/widgets/drawer/app_drawer_widget.dart index 3c5ac608..ce1397f8 100644 --- a/lib/widgets/drawer/app_drawer_widget.dart +++ b/lib/widgets/drawer/app_drawer_widget.dart @@ -323,7 +323,6 @@ class _AppDrawerState extends State { await this.sharedPref.getObject(USER_PROFILE)); setState(() { this.user = data; - print(this.user); }); } } diff --git a/lib/widgets/others/floating_button_search.dart b/lib/widgets/others/floating_button_search.dart index 2d5b6071..b8c8c916 100644 --- a/lib/widgets/others/floating_button_search.dart +++ b/lib/widgets/others/floating_button_search.dart @@ -1,27 +1,44 @@ import 'dart:collection'; +import 'dart:io'; import 'dart:math'; import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorProfile.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/my_web_view.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/parking_page.dart'; +import 'package:diplomaticquarterapp/pages/Blood/blood_donation.dart'; +import 'package:diplomaticquarterapp/pages/Blood/my_balance_page.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/BranchView.dart'; +import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart'; +import 'package:diplomaticquarterapp/pages/ErService/AmbulanceReq.dart'; +import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart'; import 'package:diplomaticquarterapp/pages/ErService/NearestEr.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/MyAppointments.dart'; +import 'package:diplomaticquarterapp/pages/family/my-family.dart'; import 'package:diplomaticquarterapp/pages/feedback/feedback_home_page.dart'; import 'package:diplomaticquarterapp/pages/insurance/insurance_approval_screen.dart'; import 'package:diplomaticquarterapp/pages/insurance/insurance_update_screen.dart'; import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart'; +import 'package:diplomaticquarterapp/pages/login/welcome.dart'; +import 'package:diplomaticquarterapp/pages/medical/balance/advance_payment_page.dart'; import 'package:diplomaticquarterapp/pages/medical/doctor/doctor_home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/labs/labs_home_page.dart'; +import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart'; import 'package:diplomaticquarterapp/pages/medical/patient_sick_leave_page.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/radiology/radiology_home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/reports/report_home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/vital_sign/vital_sign_details_screen.dart'; +import 'package:diplomaticquarterapp/pages/paymentService/payment_service.dart'; import 'package:diplomaticquarterapp/pages/vaccine/my_vaccines_screen.dart'; import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart'; @@ -30,6 +47,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_tts/flutter_tts.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:provider/provider.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'; @@ -38,6 +56,7 @@ import 'package:diplomaticquarterapp/pages/BookAppointment/Search.dart'; import 'package:flutter/cupertino.dart'; import 'package:smart_progress_bar/smart_progress_bar.dart'; +import 'package:url_launcher/url_launcher.dart'; class FloatingSearchButton extends StatefulWidget { @override @@ -67,11 +86,12 @@ class _FloatingSearchButton extends State bool isSearching = false; Map results = {}; String lastStatus; - + AuthenticatedUser user; bool _isInit = true; var event = RobotProvider(); - + var sharedPref = new AppSharedPreferences(); bool _hasSpeech = false; + ProjectViewModel projectProvider; @override void initState() { super.initState(); @@ -83,14 +103,17 @@ class _FloatingSearchButton extends State }); } }); + requestPermissions(); // Future.delayed(const Duration(seconds: 10), () { initSpeechState().then((value) => {}); + getUserData(); // }); } @override Widget build(BuildContext context) { + projectProvider = Provider.of(context); return AnimatedPositioned( onEnd: () { // setState(() { @@ -156,7 +179,9 @@ class _FloatingSearchButton extends State child: GestureDetector( onTap: () { setState(() { - activeAnimation = true; + if (this.mounted) { + activeAnimation = true; + } }); }, child: Align( @@ -169,45 +194,7 @@ class _FloatingSearchButton extends State ), ), ), - ]) - - // Stack( - // fit: StackFit.loose, - // overflow: Overflow.visible, - // children: [ - // Container(), - // Positioned( - // child: GestureDetector( - // behavior: HitTestBehavior.translucent, - // onTapDown: (TapDownDetails details) => { - // setState(() { - // activeAnimation = true; - // }) - // }, // handle your image tap here - // child: Image.asset( - // 'assets/images/CloseIcon.png', - // fit: BoxFit.cover, // this is the solution for border - // width: 30.0, - // height: 30.0, - // ), - // )), - // Positioned( - // child: GestureDetector( - // onTap: () { - // this.roboSearch(context); - // }, // handle your image tap here - // child: SvgPicture.asset('assets/images/robort_svg.svg'))) - - // // new RawMaterialButton( - // // // shape: new CircleBorder(), - // // elevation: 1.0, - // // child: SvgPicture.asset('assets/images/robort_svg.svg'), - // // onPressed: () {}, - // // ), - // ], - // ) - - ); + ])); } startVoiceSearch() async { @@ -232,12 +219,11 @@ class _FloatingSearchButton extends State if (result.finalResult == true) { // setState(() { - reconizedWord = result.recognizedWords; event.setValue({"searchText": reconizedWord}); - setState(() { - searchText = reconizedWord; - }); + // setState(() { + // searchText = reconizedWord; + // }); Future.delayed(const Duration(seconds: 1), () { _speak(reconizedWord); }); @@ -278,9 +264,9 @@ class _FloatingSearchButton extends State } if (!mounted) return; - setState(() { - _hasSpeech = hasSpeech; - }); + // setState(() { + // _hasSpeech = hasSpeech; + // }); } void errorListener(SpeechRecognitionError error) { @@ -402,6 +388,19 @@ class _FloatingSearchButton extends State } } break; + case '104': + { + List clnicID = unique(result['ClinicId']); + //= result['ProjectId'] ? result['ProjectId'] : 0; //result['ProjectId']; + + if (clnicID.length == 1) { + getDoctorsList(result['ProjectId'], clnicID[0], context, + doctorId: null, doctorName: null, isNearest: true); + } else { + goToClinic(clnicID); + } + } + break; case '4': { Navigator.push(context, FadePage(page: LabsHomePage())); @@ -483,11 +482,193 @@ class _FloatingSearchButton extends State } break; case '16': + { + Navigator.push(context, FadePage(page: MyBalancePage())); + } + break; + case '17': + { + Navigator.push(context, FadePage(page: MedicalProfilePage())); + } + break; + case '18': + { + //Drivethrough need to be implemeted here. + + } + break; + case '19': { Navigator.push(context, FadePage(page: LiveCareHome())); } break; + case '20': + { + //CMC service need to be implemeted + } + break; + case '21': + { + Navigator.push(context, FadePage(page: MyFamily())); + } + break; + case '22': + { + Navigator.push(context, FadePage(page: BloodDonationPage())); + } + break; + case '23': + { + //health calculator need to be implemeted + } + break; + case '24': + { + Navigator.of(context).push(MaterialPageRoute( + builder: (BuildContext context) => MyWebView( + title: "HMG News", + selectedUrl: + "https://twitter.com/hashtag/مجموعة_د_سليمان_الحبيب_الطبية?src=hashtag_click&f=live", + ))); + } + break; + case '25': + { + if (user == null) { + Navigator.push(context, FadePage(page: WelcomeLogin())); + } + } + break; + case '26': + { + Navigator.push(context, FadePage(page: ParkingPage())); + } + break; + case '27': + { + Navigator.push( + context, + FadePage( + page: ErOptions( + isAppbar: true, + ))); + } + break; + case '28': + { + Navigator.push(context, FadePage(page: AmbulanceReq())); + } + break; + case '29': + { + Navigator.push(context, FadePage(page: FindUsPage())); + } + break; + case '30': + { + launch("tel://" + result['PhoneNumbers'][0]); + } + break; + case '31': + { + Navigator.of(context).popUntil(ModalRoute.withName('/')); + } + break; + case '32': + { + Navigator.push(context, FadePage(page: AdvancePaymentPage())); + } + break; + case '33': + { + if (result['LanguageCode'] != '0') { + if (projectProvider.isArabic) { + projectProvider.changeLanguage('en'); + } else { + projectProvider.changeLanguage('ar'); + } + } + } + break; + case '34': + { + //settings page need to be implemented here + } + break; + case '35': + { + if (Platform.isIOS) { + launch( + "https://apps.apple.com/sa/app/dr-suliaman-alhabib/id733503978"); + } else { + launch( + "https://play.google.com/store/apps/details?id=com.ejada.hmg&hl=en"); + } + } + break; + case '36': + { + Navigator.of(context).pushNamed( + REGISTER, + ); + } + break; + case '37': + { + Navigator.of(context).pushNamed( + SYMPTOM_CHECKER, + ); + } + break; + case '38': + { + await this.sharedPref.setInt(IS_SEARCH_APPO, 1); + Navigator.push(context, FadePage(page: MyAppointments())); + } + break; + case '39': + { + await this.sharedPref.setInt(IS_SEARCH_APPO, 2); + Navigator.push(context, FadePage(page: MyAppointments())); + } + break; + case '40': + { + //Home health care service need to be implemeted here + } + break; + case '41': + { + Navigator.push(context, FadePage(page: PaymentService())); + } + break; + case '42': + { + //weather indicator need to be implemented here + } + break; + case '43': + { + await this.sharedPref.setInt(IS_SEARCH_APPO, 3); + Navigator.push(context, FadePage(page: MyAppointments())); + } + break; + case '44': + { + //chat need be implmented here. + } + break; + case '45': + { + launch('https://hmg.com/ir/ar/Pages/ShareInformation/home.aspx'); + } + break; + case '46': + { + launch('https://hmg.com/ir/ar/pages/home.aspx'); + } + break; case '200': { Navigator.push(context, FadePage(page: FeedbackHomePage())); @@ -499,8 +680,6 @@ class _FloatingSearchButton extends State speak(); break; } - - //searchProvider.setLisener(result); } getDoctorProfile(projectId, clinicId, doctorId, context, doctorData) { @@ -526,13 +705,14 @@ class _FloatingSearchButton extends State }); } - getDoctorsList(projectId, clinicId, context, {doctorId, doctorName}) { + getDoctorsList(projectId, clinicId, context, + {doctorId, doctorName, isNearest = false}) { List doctorsList = []; List arr = []; List arrDistance = []; DoctorsListService service = new DoctorsListService(); service - .getDoctorsList(clinicId, projectId, false, context, + .getDoctorsList(clinicId, projectId, isNearest, context, doctorId: doctorId, doctorName: doctorName) .then((res) { if (res['MessageStatus'] == 1) { @@ -620,8 +800,8 @@ class _FloatingSearchButton extends State speak() async { if (_currentLocaleId == 'en-US' && results['ReturnMessage'] != null) { - await flutterTts.setVoice("en-us-x-sfg#male_2-local"); - await flutterTts.setLanguage(_currentLocaleId); + await flutterTts.setVoice("en-us-x-sfg#male_2-local"); + await flutterTts.setLanguage(_currentLocaleId); await flutterTts.speak(results['ReturnMessage']); } else if (results['ReturnMessage_Ar'] != null) { await flutterTts.setLanguage(_currentLocaleId); @@ -648,4 +828,13 @@ class _FloatingSearchButton extends State List unique(List list) { return list.toSet().toList(); } + + getUserData() async { + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + setState(() async { + user = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + }); + } + } }