diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index f9022bd3..037e9622 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -223,10 +223,10 @@ const Map> localizedValues = { 'endcall': {'en': 'End Call', 'ar': 'إنهاء المكالمة'}, 'transfertoadmin': {'en': 'Transfer to admin', 'ar': 'نقل إلى المسؤول'}, "searchMedicineImageCaption": { - 'en': 'Type or speak the medicine name to search', - 'ar': ' اكتب أو انطق اسم الدواء للبحث' + 'en': 'Type the medicine name to search', + 'ar': ' اكتب اسم الدواء للبحث' }, - "type": {'en': 'Type or Speak', 'ar': 'اكتب أو تحدث '}, + "type": {'en': 'Type ', 'ar': 'اكتب'}, "fromDate": {'en': 'From Date', 'ar': 'من تاريخ'}, "toDate": {'en': 'To Date', 'ar': 'الى تاريخ'}, "searchPatientImageCaptionTitle": { diff --git a/lib/core/service/medicine_service.dart b/lib/core/service/medicine_service.dart new file mode 100644 index 00000000..df23172f --- /dev/null +++ b/lib/core/service/medicine_service.dart @@ -0,0 +1,49 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; +import 'package:doctor_app_flutter/models/doctor/request_schedule.dart'; +import 'package:doctor_app_flutter/models/pharmacies/pharmacies_List_request_model.dart'; +import 'package:doctor_app_flutter/models/pharmacies/pharmacies_items_request_model.dart'; + +class MedicineService extends BaseService { + var _pharmacyItemsList = []; + var _pharmaciesList = []; + get pharmacyItemsList => _pharmacyItemsList; + get pharmaciesList => _pharmaciesList; + + PharmaciesItemsRequestModel _itemsRequestModel = + PharmaciesItemsRequestModel(); + PharmaciesListRequestModel _listRequestModel = PharmaciesListRequestModel(); + + + Future getMedicineItem(String itemName) async { + _itemsRequestModel.pHRItemName = itemName; + await baseAppClient.post( + PHARMACY_ITEMS_URL, + onSuccess: (dynamic response, int statusCode) { + _pharmacyItemsList.clear(); + _pharmacyItemsList = response['ListPharmcy_Region_enh']; + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: _itemsRequestModel.toJson(), + ); + } + + Future getPharmaciesList(int itemId) async { + _listRequestModel.itemID = itemId; + await baseAppClient.post( + PHARMACY_LIST_URL, + onSuccess: (dynamic response, int statusCode) { + _pharmaciesList.clear(); + _pharmaciesList = response['PharmList']; + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: _listRequestModel.toJson(), + ); + } +} diff --git a/lib/core/service/referred_patient_service.dart b/lib/core/service/referred_patient_service.dart new file mode 100644 index 00000000..0fb3de64 --- /dev/null +++ b/lib/core/service/referred_patient_service.dart @@ -0,0 +1,65 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; +import 'package:doctor_app_flutter/models/doctor/verify_referral_doctor_remarks.dart'; +import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; +import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; + +class ReferredPatientService extends BaseService { + List _listMyReferredPatientModel = []; + + List get listMyReferredPatientModel => + _listMyReferredPatientModel; + + Helpers helpers = Helpers(); + + RequestMyReferralPatientModel _requestMyReferralPatient = + RequestMyReferralPatientModel(); + VerifyReferralDoctorRemarks _verifyreferraldoctorremarks = + VerifyReferralDoctorRemarks(); + + Future getMyReferredPatient() async { + await baseAppClient.post( + GET_MY_REFERRED_PATIENT, + onSuccess: (dynamic response, int statusCode) { + _listMyReferredPatientModel.clear(); + response['List_MyReferredPatient'].forEach((v) { + listMyReferredPatientModel.add(MyReferredPatientModel.fromJson(v)); + }); + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: _requestMyReferralPatient.toJson(), + ); + } + + Future verify(MyReferredPatientModel model) async { + _verifyreferraldoctorremarks.patientID = model.projectId; + _verifyreferraldoctorremarks.admissionNo = model.admissionNo; + _verifyreferraldoctorremarks.lineItemNo = model.lineItemNo; + _verifyreferraldoctorremarks.referredDoctorRemarks = + model.referredDoctorRemarks; + _verifyreferraldoctorremarks.referringDoctor = model.referringDoctor; + _verifyreferraldoctorremarks.firstName = model.firstName; + _verifyreferraldoctorremarks.middleName = model.middleName; + _verifyreferraldoctorremarks.lastName = model.lastName; + _verifyreferraldoctorremarks.patientMobileNumber = model.mobileNumber; + _verifyreferraldoctorremarks.patientIdentificationID = + model.patientIdentificationNo; + + await baseAppClient.post( + GET_MY_REFERRED_PATIENT, + onSuccess: (dynamic response, int statusCode) { + listMyReferredPatientModel[listMyReferredPatientModel.indexOf(model)] = + model; + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: _verifyreferraldoctorremarks.toJson(), + ); + } +} diff --git a/lib/core/viewModel/medicine_view_model.dart b/lib/core/viewModel/medicine_view_model.dart new file mode 100644 index 00000000..72f4d0ab --- /dev/null +++ b/lib/core/viewModel/medicine_view_model.dart @@ -0,0 +1,38 @@ +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/hospitals_model.dart'; +import 'package:doctor_app_flutter/core/service/doctor_reply_service.dart'; +import 'package:doctor_app_flutter/core/service/hospital/hospitals_service.dart'; +import 'package:doctor_app_flutter/core/service/medicine_service.dart'; +import 'package:doctor_app_flutter/core/service/schedule_service.dart'; +import 'package:doctor_app_flutter/models/doctor/list_doctor_working_hours_table_model.dart'; +import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart'; + +import '../../locator.dart'; +import 'base_view_model.dart'; + +class MedicineViewModel extends BaseViewModel { + MedicineService _medicineService = locator(); + get pharmacyItemsList => _medicineService.pharmacyItemsList; + get pharmaciesList => _medicineService.pharmaciesList; + + + Future getMedicineItem(String itemName) async { + setState(ViewState.Busy); + await _medicineService.getMedicineItem(itemName); + if (_medicineService.hasError) { + error = _medicineService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + + Future getPharmaciesList(int itemId) async { + setState(ViewState.Busy); + await _medicineService.getPharmaciesList(itemId); + if (_medicineService.hasError) { + error = _medicineService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } +} diff --git a/lib/core/viewModel/referred_view_model.dart b/lib/core/viewModel/referred_view_model.dart new file mode 100644 index 00000000..b12241e3 --- /dev/null +++ b/lib/core/viewModel/referred_view_model.dart @@ -0,0 +1,40 @@ +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/hospitals_model.dart'; +import 'package:doctor_app_flutter/core/service/doctor_reply_service.dart'; +import 'package:doctor_app_flutter/core/service/hospital/hospitals_service.dart'; +import 'package:doctor_app_flutter/core/service/referral_patient_service.dart'; +import 'package:doctor_app_flutter/core/service/referred_patient_service.dart'; +import 'package:doctor_app_flutter/core/service/schedule_service.dart'; +import 'package:doctor_app_flutter/models/doctor/list_doctor_working_hours_table_model.dart'; +import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart'; +import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.dart'; +import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; + +import '../../locator.dart'; +import 'base_view_model.dart'; + +class ReferredPatientViewModel extends BaseViewModel { + ReferredPatientService _referralPatientService = locator(); + + List get listMyReferredPatientModel => _referralPatientService.listMyReferredPatientModel; + + Future getMyReferredPatient() async { + setState(ViewState.Busy); + await _referralPatientService.getMyReferredPatient(); + if (_referralPatientService.hasError) { + error = _referralPatientService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + + Future verify(MyReferredPatientModel model) async { + setState(ViewState.BusyLocal); + await _referralPatientService.verify(model); + if (_referralPatientService.hasError) { + error = _referralPatientService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } +} diff --git a/lib/locator.dart b/lib/locator.dart index e394aa52..f9ba83be 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -2,11 +2,15 @@ import 'package:get_it/get_it.dart'; import 'core/service/doctor_reply_service.dart'; import 'core/service/hospital/hospitals_service.dart'; +import 'core/service/medicine_service.dart'; import 'core/service/referral_patient_service.dart'; +import 'core/service/referred_patient_service.dart'; import 'core/service/schedule_service.dart'; import 'core/viewModel/doctor_replay_view_model.dart'; import 'core/viewModel/hospital_view_model.dart'; +import 'core/viewModel/medicine_view_model.dart'; import 'core/viewModel/referral_view_model.dart'; +import 'core/viewModel/referred_view_model.dart'; import 'core/viewModel/schedule_view_model.dart'; GetIt locator = GetIt.instance; @@ -18,10 +22,14 @@ void setupLocator() { locator.registerLazySingleton(() => DoctorReplyService()); locator.registerLazySingleton(() => ScheduleService()); locator.registerLazySingleton(() => ReferralPatientService()); + locator.registerLazySingleton(() => ReferredPatientService()); + locator.registerLazySingleton(() => MedicineService()); /// View Model locator.registerFactory(() => HospitalViewModel()); locator.registerFactory(() => DoctorReplayViewModel()); locator.registerFactory(() => ScheduleViewModel()); locator.registerFactory(() => ReferralPatientViewModel()); + locator.registerFactory(() => ReferredPatientViewModel()); + locator.registerFactory(() => MedicineViewModel()); } diff --git a/lib/main.dart b/lib/main.dart index 31715b8a..1202c319 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,4 @@ import 'package:doctor_app_flutter/providers/livecare_provider.dart'; -import 'package:doctor_app_flutter/providers/medicine_provider.dart'; import 'package:doctor_app_flutter/providers/project_provider.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:flutter/material.dart'; @@ -9,8 +8,8 @@ import 'package:provider/provider.dart'; import './config/size_config.dart'; import './providers/auth_provider.dart'; -import './providers/patients_provider.dart'; import './providers/hospital_provider.dart'; +import './providers/patients_provider.dart'; import './routes.dart'; import 'config/config.dart'; import 'locator.dart'; @@ -43,7 +42,6 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider( create: (context) => LiveCareProvider(), ), - ChangeNotifierProvider(create: (context) => MedicineProvider(),), ], child: Consumer( builder: (context,projectProvider,child) => MaterialApp( diff --git a/lib/providers/medicine_provider.dart b/lib/providers/medicine_provider.dart deleted file mode 100644 index 99674f18..00000000 --- a/lib/providers/medicine_provider.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/pharmacies/pharmacies_List_request_model.dart'; -import 'package:doctor_app_flutter/models/pharmacies/pharmacies_items_request_model.dart'; -import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; -import 'package:flutter/cupertino.dart'; - -class MedicineProvider with ChangeNotifier { - DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); - - var pharmacyItemsList = []; - var pharmaciesList = []; - bool isFinished = true; - bool hasError = false; - String errorMsg = ''; - BaseAppClient baseAppClient = BaseAppClient(); - - PharmaciesItemsRequestModel _itemsRequestModel = - PharmaciesItemsRequestModel(); - PharmaciesListRequestModel _listRequestModel = PharmaciesListRequestModel(); - - clearPharmacyItemsList() { - pharmacyItemsList.clear(); - notifyListeners(); - } - - getMedicineItem(String itemName) async { - _itemsRequestModel.pHRItemName = itemName; - resetDefaultValues(); - pharmacyItemsList.clear(); - notifyListeners(); - try { - await baseAppClient.post(PHARMACY_ITEMS_URL, - onSuccess: (dynamic response, int statusCode) { - pharmacyItemsList = response['ListPharmcy_Region_enh']; - hasError = false; - isFinished = true; - errorMsg = "Done"; - }, onFailure: (String error, int statusCode) { - isFinished = true; - hasError = true; - errorMsg = error; - }, body: _itemsRequestModel.toJson()); - notifyListeners(); - } catch (error) { - throw error; - } - } - - getPharmaciesList(int itemId) async { - resetDefaultValues(); - try { - _listRequestModel.itemID = itemId; - isFinished = false; - await baseAppClient.post(PHARMACY_LIST_URL, - onSuccess: (dynamic response, int statusCode) { - pharmaciesList = response['PharmList']; - hasError = false; - isFinished = true; - errorMsg = "Done"; - }, onFailure: (String error, int statusCode) { - isFinished = true; - hasError = true; - errorMsg = error; - }, body: _listRequestModel.toJson()); - notifyListeners(); - } catch (error) { - throw error; - } - } - - resetDefaultValues() { - isFinished = false; - hasError = false; - errorMsg = ''; - notifyListeners(); - } -} diff --git a/lib/providers/referral_patient_provider.dart b/lib/providers/referral_patient_provider.dart deleted file mode 100644 index afc4d2b7..00000000 --- a/lib/providers/referral_patient_provider.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.dart'; -import 'package:doctor_app_flutter/models/doctor/request_add_referred_doctor_remarks.dart'; -import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart'; -import 'package:doctor_app_flutter/util/helpers.dart'; -import 'package:flutter/cupertino.dart'; - - -class MyReferralPatientProvider with ChangeNotifier { - List listMyReferralPatientModel = []; - - bool isLoading = true; - bool isError = false; - String error = ''; - Helpers helpers = Helpers(); - BaseAppClient baseAppClient = BaseAppClient(); - - - RequestMyReferralPatientModel _requestMyReferralPatient = RequestMyReferralPatientModel(); - RequestAddReferredDoctorRemarks _requestAddReferredDoctorRemarks = RequestAddReferredDoctorRemarks(); - - MyReferralPatientProvider() { - getMyReferralPatient(); - } - - getMyReferralPatient() async { - try { - await baseAppClient.post(GET_MY_REFERRAL_PATIENT, - body: _requestMyReferralPatient.toJson(), - onSuccess: (dynamic response, int statusCode) { - response['List_MyReferralPatient'].forEach((v) { - listMyReferralPatientModel.add(MyReferralPatientModel.fromJson(v)); - }); - isError = false; - isLoading = false; - }, - onFailure: (String error, int statusCode) { - isError = true; - isLoading = false; - this.error = error; - }, - ); - notifyListeners(); - } catch (error) { - isLoading = false; - isError = true; - this.error = 'Something wrong happened, please contact the admin'; - notifyListeners(); - } - } - - Future replay( - String referredDoctorRemarks, MyReferralPatientModel model) async { - try { - _requestAddReferredDoctorRemarks.admissionNo = model.admissionNo; - _requestAddReferredDoctorRemarks.patientID = model.patientID; - _requestAddReferredDoctorRemarks.referredDoctorRemarks = referredDoctorRemarks; - _requestAddReferredDoctorRemarks.lineItemNo = model.lineItemNo; - _requestAddReferredDoctorRemarks.referringDoctor = model.referringDoctor; - await baseAppClient.post(ADD_REFERRED_DOCTOR_REMARKS, - body: _requestAddReferredDoctorRemarks.toJson(), - onSuccess: (dynamic body, int statusCode) { - model.referredDoctorRemarks = referredDoctorRemarks; - listMyReferralPatientModel[ - listMyReferralPatientModel.indexOf(model)] = model; - notifyListeners(); - }, - onFailure: (String error, int statusCode) { - throw (error); - }, - ); - } catch (error) { - throw error; - } - } -} diff --git a/lib/providers/referred_patient_provider.dart b/lib/providers/referred_patient_provider.dart deleted file mode 100644 index 2aba752c..00000000 --- a/lib/providers/referred_patient_provider.dart +++ /dev/null @@ -1,83 +0,0 @@ -import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; -import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart'; -import 'package:doctor_app_flutter/models/doctor/verify_referral_doctor_remarks.dart'; - -import 'package:flutter/cupertino.dart'; -import '../util/helpers.dart'; - - -class MyReferredPatientProvider with ChangeNotifier { - List listMyReferredPatientModel = []; - - bool isLoading = true; - bool isError = false; - String error = ''; - Helpers helpers = Helpers(); - RequestMyReferralPatientModel _requestMyReferralPatient = RequestMyReferralPatientModel(); - VerifyReferralDoctorRemarks _verifyreferraldoctorremarks = VerifyReferralDoctorRemarks(); - MyReferredPatientProvider() { - getMyReferralPatient(); - } - BaseAppClient baseAppClient = BaseAppClient(); - - - getMyReferralPatient() async { - try { - await baseAppClient.post(GET_MY_REFERRED_PATIENT, - body: _requestMyReferralPatient.toJson(), - onSuccess: (dynamic response, int statusCode) { - response['List_MyReferredPatient'].forEach((v) { - listMyReferredPatientModel.add(MyReferredPatientModel.fromJson(v)); - }); - isError = false; - isLoading = false; - }, - onFailure: (String error, int statusCode) { - isError = true; - isLoading = false; - this.error = error; - }, - ); - notifyListeners(); - } catch (error) { - isLoading = false; - isError = true; - this.error = 'Something wrong happened, please contact the admin'; - notifyListeners(); - } - } - - - Future verify( - MyReferredPatientModel model) async { - try { - _verifyreferraldoctorremarks.patientID=model.projectId; - _verifyreferraldoctorremarks.admissionNo =model.admissionNo; - _verifyreferraldoctorremarks.lineItemNo = model.lineItemNo; - _verifyreferraldoctorremarks.referredDoctorRemarks=model.referredDoctorRemarks; - _verifyreferraldoctorremarks.referringDoctor=model.referringDoctor; - _verifyreferraldoctorremarks.firstName=model.firstName; - _verifyreferraldoctorremarks.middleName=model.middleName; - _verifyreferraldoctorremarks.lastName=model.lastName; - _verifyreferraldoctorremarks.patientMobileNumber=model.mobileNumber; - _verifyreferraldoctorremarks.patientIdentificationID=model.patientIdentificationNo; - - await baseAppClient.post(GET_MY_REFERRED_PATIENT, - body: _verifyreferraldoctorremarks.toJson(), - onSuccess: (dynamic body, int statusCode) { - - listMyReferredPatientModel[ - listMyReferredPatientModel.indexOf(model)] = model; - notifyListeners(); - }, - onFailure: (String error, int statusCode) { - throw(error); - }, - ); - } catch (error) { - throw(error); - } - } -} diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index b1224ee6..33e39e9c 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -6,9 +6,7 @@ import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart'; import 'package:doctor_app_flutter/models/doctor/profile_req_Model.dart'; import 'package:doctor_app_flutter/providers/auth_provider.dart'; import 'package:doctor_app_flutter/providers/hospital_provider.dart'; -import 'package:doctor_app_flutter/providers/medicine_provider.dart'; import 'package:doctor_app_flutter/providers/project_provider.dart'; -import 'package:doctor_app_flutter/providers/referred_patient_provider.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; @@ -745,10 +743,7 @@ class _DashboardScreenState extends State { context, MaterialPageRoute( builder: (context) => - ChangeNotifierProvider( - create: (_) => MedicineProvider(), - child: MedicineSearchScreen(), - ), + MedicineSearchScreen(), ), ); }, @@ -854,11 +849,7 @@ class _DashboardScreenState extends State { context, MaterialPageRoute( builder: (context) => - ChangeNotifierProvider( - create: (_) => - MyReferredPatientProvider(), - child: MyReferredPatient(), - ), + MyReferredPatient(), ), ); }, diff --git a/lib/screens/doctor/my_referred_patient_screen.dart b/lib/screens/doctor/my_referred_patient_screen.dart index ec91b4c3..cd9112e2 100644 --- a/lib/screens/doctor/my_referred_patient_screen.dart +++ b/lib/screens/doctor/my_referred_patient_screen.dart @@ -1,42 +1,33 @@ -import 'package:doctor_app_flutter/providers/referred_patient_provider.dart'; +import 'package:doctor_app_flutter/core/viewModel/referred_view_model.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/doctor/my_referred_patient_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import '../../widgets/shared/app_scaffold_widget.dart'; class MyReferredPatient extends StatelessWidget { - MyReferredPatientProvider referredPatientProvider; @override Widget build(BuildContext context) { - referredPatientProvider = Provider.of(context); - return AppScaffold( + return BaseView( + onModelReady: (model) => model.getMyReferredPatient(), + builder: (_, model, w) => AppScaffold( + baseViewModel: model, appBarTitle: TranslationBase.of(context).myReferredPatient, - body: referredPatientProvider.isLoading - ? DrAppCircularProgressIndeicator() - : referredPatientProvider.isError - ? Center( - child: AppText( - referredPatientProvider.error, - color: Theme.of(context).errorColor, - ), - ) - : referredPatientProvider.listMyReferredPatientModel.length == 0 - ? Center( - child: AppText( - TranslationBase.of(context).errorNoSchedule, - color: Theme.of(context).errorColor, - ), - ) - : Container( - padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), - child: ListView( - children: [ - Column( + body: model.listMyReferredPatientModel.length == 0 + ? Center( + child: AppText( + TranslationBase.of(context).errorNoSchedule, + color: Theme.of(context).errorColor, + ), + ) + : Container( + padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), + child: ListView( + children: [ + Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( @@ -45,11 +36,12 @@ class MyReferredPatient extends StatelessWidget { Container( child: Column( //children: referredPatientProvider.listMyReferralPatientModel.map((item) { - children: referredPatientProvider + children: model .listMyReferredPatientModel .map((item) { return MyReferredPatientWidget( myReferredPatientModel: item, + model:model ); }).toList(), ), @@ -59,6 +51,6 @@ class MyReferredPatient extends StatelessWidget { ], ), ), - ); + )); } } diff --git a/lib/screens/medicine/medicine_search_screen.dart b/lib/screens/medicine/medicine_search_screen.dart index 764c1b34..3a2ff96c 100644 --- a/lib/screens/medicine/medicine_search_screen.dart +++ b/lib/screens/medicine/medicine_search_screen.dart @@ -2,8 +2,9 @@ import 'dart:math'; import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; -import 'package:doctor_app_flutter/providers/medicine_provider.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/medicine/pharmacies_list_screen.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; @@ -14,10 +15,9 @@ import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/material.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'; @@ -40,7 +40,6 @@ class _MedicineSearchState extends State { final myController = TextEditingController(); Helpers helpers = new Helpers(); bool _hasSpeech = false; - MedicineProvider _medicineProvider; String _currentLocaleId = ""; bool _isInit = true; final SpeechToText speech = SpeechToText(); @@ -57,12 +56,6 @@ class _MedicineSearchState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); - if (_isInit) { - _medicineProvider = Provider.of(context); - // requestPermissions(); - // initSpeechState(); - } - _isInit = false; } void requestPermissions() async { @@ -92,7 +85,8 @@ class _MedicineSearchState extends State { @override Widget build(BuildContext context) { - return AppScaffold( + return BaseView( + builder: (_, model, w) => AppScaffold( appBarTitle: TranslationBase.of(context).searchMedicine, body: FractionallySizedBox( widthFactor: 0.97, @@ -140,7 +134,7 @@ class _MedicineSearchState extends State { controller: myController, onSaved: (value) {}, onFieldSubmitted: (value) { - searchMedicine(context); + searchMedicine(context, model); }, textInputAction: TextInputAction.search, // TODO return it back when it needed @@ -165,109 +159,115 @@ class _MedicineSearchState extends State { child: Wrap( alignment: WrapAlignment.center, children: [ + // TODO change it secondary button and add loading AppButton( title: TranslationBase.of(context).search, onPressed: () { - searchMedicine(context); + searchMedicine(context, model); }, ), ], ), ), - Container( - margin: EdgeInsets.only( - left: SizeConfig.heightMultiplier * 2), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - TranslationBase.of(context).youCanFind + - _medicineProvider.pharmacyItemsList.length - .toString() + - " " + - TranslationBase.of(context).itemsInSearch, - fontWeight: FontWeight.bold, - ), - ], - ), - ), - Container( - height: MediaQuery.of(context).size.height * 0.35, - child: Container( - child: !_medicineProvider.isFinished - ? DrAppCircularProgressIndeicator() - : _medicineProvider.hasError - ? Center( - child: Text( - _medicineProvider.errorMsg, - style: TextStyle( - color: - Theme.of(context).errorColor), - ), - ) - : ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - itemCount: - _medicineProvider.pharmacyItemsList == - null - ? 0 - : _medicineProvider - .pharmacyItemsList.length, - itemBuilder: - (BuildContext context, int index) { - return InkWell( - child: MedicineItemWidget( - label: _medicineProvider - .pharmacyItemsList[index] - ["ItemDescription"], - url: _medicineProvider - .pharmacyItemsList[index] - ["ImageSRCUrl"], - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - PharmaciesListScreen( - itemID: _medicineProvider + + NetworkBaseView( + baseViewModel: model, + child: Column( + children: [ + Container( + margin: EdgeInsets.only( + left: SizeConfig.heightMultiplier * 2), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + TranslationBase + .of(context) + .youCanFind + + model.pharmacyItemsList.length + .toString() + + " " + + TranslationBase + .of(context) + .itemsInSearch, + fontWeight: FontWeight.bold, + ), + ], + ), + ), + Container( + height: MediaQuery + .of(context) + .size + .height * 0.35, + child: Container( + child: ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + itemCount: + model.pharmacyItemsList == + null + ? 0 + : model + .pharmacyItemsList.length, + itemBuilder: + (BuildContext context, int index) { + return InkWell( + child: MedicineItemWidget( + label: model + .pharmacyItemsList[index] + ["ItemDescription"], + url: model + .pharmacyItemsList[index] + ["ImageSRCUrl"], + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + PharmaciesListScreen( + itemID: model .pharmacyItemsList[ index]["ItemID"], - url: _medicineProvider + url: model .pharmacyItemsList[ index]["ImageSRCUrl"]), - ), + ), + ); + }, ); - }, - ); - }, - ), - ), - ), + }, + ), + ), + ), + ], + )), ], ), ), - ], - ), - ), - )); + ], + ), + ), + ),),); } - searchMedicine(context) { + searchMedicine(context, MedicineViewModel model) { FocusScope.of(context).unfocus(); if (myController.text.isNullOrEmpty()) { - _medicineProvider.clearPharmacyItemsList(); - helpers.showErrorToast(TranslationBase.of(context).typeMedicineName) ; + helpers.showErrorToast(TranslationBase + .of(context) + .typeMedicineName); //"Type Medicine Name") return; } if (myController.text.length < 3) { - _medicineProvider.clearPharmacyItemsList(); - helpers.showErrorToast(TranslationBase.of(context).moreThan3Letter); + helpers.showErrorToast(TranslationBase + .of(context) + .moreThan3Letter); return; } - _medicineProvider.getMedicineItem(myController.text); + model.getMedicineItem(myController.text); } startVoiceSearch() { @@ -292,7 +292,7 @@ class _MedicineSearchState extends State { lastStatus = ''; myController.text = reconizedWord; Future.delayed(const Duration(seconds: 2), () { - searchMedicine(context); + // searchMedicine(context); }); }); } diff --git a/lib/screens/medicine/pharmacies_list_screen.dart b/lib/screens/medicine/pharmacies_list_screen.dart index dd0a3649..d55916b2 100644 --- a/lib/screens/medicine/pharmacies_list_screen.dart +++ b/lib/screens/medicine/pharmacies_list_screen.dart @@ -2,14 +2,14 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:doctor_app_flutter/config/size_config.dart'; -import 'package:doctor_app_flutter/providers/medicine_provider.dart'; +import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart'; import 'package:doctor_app_flutter/providers/project_provider.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.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/app_texts_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:maps_launcher/maps_launcher.dart'; @@ -34,7 +34,6 @@ class PharmaciesListScreen extends StatefulWidget { class _PharmaciesListState extends State { var _data; Helpers helpers = new Helpers(); - MedicineProvider _medicineProvider; ProjectProvider projectsProvider; bool _isInit = true; @@ -43,47 +42,38 @@ class _PharmaciesListState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); - if (_isInit) { - _medicineProvider = Provider.of(context); - pharmaciesList(); - } _isInit = false; } @override Widget build(BuildContext context) { projectsProvider = Provider.of(context); - return AppScaffold( + return BaseView( + onModelReady: (model) => model.getPharmaciesList(widget.itemID), + builder: (_, model, w) => AppScaffold( + baseViewModel: model, appBarTitle: TranslationBase.of(context).pharmaciesList, - body: !_medicineProvider.isFinished - ? DrAppCircularProgressIndeicator() - : _medicineProvider.hasError - ? Center( - child: Text( - _medicineProvider.errorMsg, - style: TextStyle( - color: Theme.of(context).errorColor), - ), - ) - :Container( + body: Container( height: SizeConfig.screenHeight, child: ListView( shrinkWrap: true, scrollDirection: Axis.vertical, physics: const AlwaysScrollableScrollPhysics(), children: [ - _medicineProvider.pharmaciesList.length >0 ?RoundedContainer( - child: Row( - children: [ - Expanded( - flex: 1, - child: ClipRRect( - borderRadius: BorderRadius.all( - Radius.circular(7)), - child: widget.url != null ?Image.network( - widget.url, - height: - SizeConfig.imageSizeMultiplier * + model.pharmaciesList.length > 0 + ? RoundedContainer( + child: Row( + children: [ + Expanded( + flex: 1, + child: ClipRRect( + borderRadius: + BorderRadius.all(Radius.circular(7)), + child: widget.url != null + ? Image.network( + widget.url, + height: + SizeConfig.imageSizeMultiplier * 21, width: SizeConfig.imageSizeMultiplier * @@ -110,7 +100,7 @@ class _PharmaciesListState extends State { fontWeight: FontWeight.bold, ), AppText( - _medicineProvider.pharmaciesList[0]["ItemDescription"], + model.pharmaciesList[0]["ItemDescription"], marginLeft: 10, marginTop: 0, marginRight: 10, @@ -125,7 +115,7 @@ class _PharmaciesListState extends State { fontWeight: FontWeight.bold, ), AppText( - _medicineProvider.pharmaciesList[0]["SellingPrice"] + model.pharmaciesList[0]["SellingPrice"] .toString(), marginLeft: 10, marginTop: 0, @@ -161,7 +151,8 @@ class _PharmaciesListState extends State { child: ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - itemCount: _medicineProvider.pharmaciesList == null ? 0 : _medicineProvider.pharmaciesList.length, + itemCount: model.pharmaciesList == null ? 0 : model + .pharmaciesList.length, itemBuilder: (BuildContext context, int index) { return RoundedContainer( child: Row( @@ -170,13 +161,14 @@ class _PharmaciesListState extends State { flex: 1, child: ClipRRect( borderRadius: - BorderRadius.all(Radius.circular(7)), + BorderRadius.all(Radius.circular(7)), child: Image.network( - _medicineProvider.pharmaciesList[index]["ProjectImageURL"], + model + .pharmaciesList[index]["ProjectImageURL"], height: - SizeConfig.imageSizeMultiplier * 15, + SizeConfig.imageSizeMultiplier * 15, width: - SizeConfig.imageSizeMultiplier * 15, + SizeConfig.imageSizeMultiplier * 15, fit: BoxFit.cover, ), ), @@ -184,7 +176,8 @@ class _PharmaciesListState extends State { Expanded( flex: 4, child: AppText( - _medicineProvider.pharmaciesList[index]["LocationDescription"], + model + .pharmaciesList[index]["LocationDescription"], margin: 10, ), ), @@ -202,8 +195,10 @@ class _PharmaciesListState extends State { Icons.call, color: Colors.red, ), - onTap: () => launch("tel://" + - _medicineProvider.pharmaciesList[index]["PhoneNumber"]), + onTap: () => + launch("tel://" + + model + .pharmaciesList[index]["PhoneNumber"]), ), ), Padding( @@ -216,11 +211,13 @@ class _PharmaciesListState extends State { onTap: () { MapsLauncher.launchCoordinates( double.parse( - _medicineProvider.pharmaciesList[index]["Latitude"]), + model + .pharmaciesList[index]["Latitude"]), double.parse( - _medicineProvider.pharmaciesList[index]["Longitude"]), - _medicineProvider.pharmaciesList[index] - ["LocationDescription"]); + model + .pharmaciesList[index]["Longitude"]), + model.pharmaciesList[index] + ["LocationDescription"]); }, ), ), @@ -233,13 +230,10 @@ class _PharmaciesListState extends State { }), ), ) - ]), - )); + ]), + ),),); } - pharmaciesList() async { - _medicineProvider.getPharmaciesList(widget.itemID); - } Image imageFromBase64String(String base64String) { return Image.memory(base64Decode(base64String)); diff --git a/lib/widgets/doctor/my_referred_patient_widget.dart b/lib/widgets/doctor/my_referred_patient_widget.dart index c4ad4f29..d9adaf3b 100644 --- a/lib/widgets/doctor/my_referred_patient_widget.dart +++ b/lib/widgets/doctor/my_referred_patient_widget.dart @@ -1,27 +1,22 @@ -import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.dart'; +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/viewModel/referred_view_model.dart'; import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; -import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; -import 'package:flutter/material.dart'; - -import 'package:doctor_app_flutter/config/size_config.dart'; - -import 'package:doctor_app_flutter/providers/referred_patient_provider.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/Text.dart'; -import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/app_button.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart'; import 'package:flutter/cupertino.dart'; - -import 'package:provider/provider.dart'; +import 'package:flutter/material.dart'; class MyReferredPatientWidget extends StatefulWidget { final MyReferredPatientModel myReferredPatientModel; + final ReferredPatientViewModel model; - MyReferredPatientWidget({Key key, this.myReferredPatientModel}); + MyReferredPatientWidget({Key key, this.myReferredPatientModel, this.model}); @override _MyReferredPatientWidgetState createState() => @@ -293,23 +288,17 @@ class _MyReferredPatientWidgetState extends State { child: Button( onTap: () async { try { - setState(() { - _isLoading = true; - }); - await Provider.of(context, listen: false).verify(widget.myReferredPatientModel); - setState(() { - _isLoading = false; - }); + + await widget.model.verify(widget.myReferredPatientModel); + DrAppToastMsg.showSuccesToast('Verify Successfully'); } catch (e) { - setState(() { - _isLoading = false; - }); + DrAppToastMsg.showErrorToast(e); } }, title: TranslationBase.of(context).verify, - loading: _isLoading, + loading: widget.model.state == ViewState.BusyLocal, ), ) ],