From b178f0827833ca9b556c563506f82b4e434860f2 Mon Sep 17 00:00:00 2001 From: hussam alhababieh Date: Sun, 14 Jun 2020 11:10:35 +0300 Subject: [PATCH 1/9] translate dashboard and patient search --- lib/config/localized_values.dart | 77 +++++++++++-------- lib/screens/dashboard_screen.dart | 22 +++--- .../patients/patient_search_screen.dart | 17 ++-- lib/util/translations_delegate_base.dart | 49 ++++++++---- 4 files changed, 100 insertions(+), 65 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 38212262..c5f26c7e 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -4,35 +4,50 @@ const Map> localizedValues = { 'language': {'en': 'App Language', 'ar': 'لغة التطبيق'}, 'lanEnglish': {'en': 'English', 'ar': 'English'}, 'lanArabic': {'en': 'العربية', 'ar': 'العربية'}, - 'doctorReply':{'en': 'Doctor Reply', 'ar': 'رد الطبيب'}, - 'time' :{'en': 'Time','ar':'الوقت'}, - 'fileNo' :{'en':'File No', 'ar':'رقم الملف'}, - 'mobileNo' :{'en':'Mobile No', 'ar':'رقم الموبايل'}, - 'messagesScreenToolbarTitle' : {'en': 'Messages','ar': 'الرسائل' }, - 'mySchedule' : {'en': 'My Schedule', 'ar' : 'جدولي'}, - 'errorNoSchedule' :{'en': 'You don\'t have any Schedule' , 'ar': 'ليس لديك أي جدول زمني'}, - 'verify': {'en': 'Verify', 'ar' : 'تحقق'}, - 'referralDoctor':{'en': 'Referral Doctor', 'ar' : 'الطبيب المُحول إليه'}, - 'referringClinic':{'en': 'Referring Clinic', 'ar' : 'العيادة المُحول إليها'}, - 'frequency':{'en': 'Frequency', 'ar' : 'نوع التحويلا'}, - 'priority':{'en': 'Priority', 'ar' : 'الأولوية'}, - 'maxResponseTime':{'en': 'Max Response Time', 'ar' : 'الوقت الأقصى للرد'}, - 'clinicDetailsandRemarks':{'en': 'Clinic Details and Remarks', 'ar' : 'ملاحضات وتفاصيل العيادة'}, - 'answerSuggestions':{'en': 'Answer/Suggestions', 'ar' : 'ملاحضات وتفاصيل العيادة'}, - 'outPatients':{'en': 'Out-Patients', 'ar' : 'ةالمريض الخارجي'}, - 'searchPatient':{'en': 'Search Patient', 'ar' : 'البحث عن مريض'}, - 'labResult':{'en': 'Lab Result', 'ar' : 'نتيجة المختبر'}, - 'todayStatistics':{'en': 'Today Statistics', 'ar' : 'إحصائيات اليوم'}, - 'arrived':{'en': 'Arrived', 'ar' : 'وصل'}, - 'er':{'en': 'ER', 'ar' : 'حالة طوارئ'}, - 'walkIn':{'en': 'Walk-in', 'ar' : 'ادخل'}, - 'notArrived':{'en': 'Not Arrived', 'ar' : 'لم يصل'}, - 'radiology':{'en': 'Radiology', 'ar' : 'الأشعة'}, - 'referral':{'en': 'Referral', 'ar' : 'االإحالة'}, - 'inPatient':{'en': 'In-Patient', 'ar' : 'االمريض الداخلي'}, - 'operations':{'en': 'Operations', 'ar' : 'عمليات'}, - 'patientServices':{'en': 'Patient Services', 'ar' : 'خدمات المرضى'}, - - - + 'doctorReply': {'en': 'Doctor Reply', 'ar': 'رد الطبيب'}, + 'time': {'en': 'Time', 'ar': 'الوقت'}, + 'fileNo': {'en': 'File No', 'ar': 'رقم الملف'}, + 'mobileNo': {'en': 'Mobile No', 'ar': 'رقم الموبايل'}, + 'messagesScreenToolbarTitle': {'en': 'Messages', 'ar': 'الرسائل'}, + 'mySchedule': {'en': 'My Schedule', 'ar': 'جدولي'}, + 'errorNoSchedule': { + 'en': 'You don\'t have any Schedule', + 'ar': 'ليس لديك أي جدول زمني' + }, + 'verify': {'en': 'Verify', 'ar': 'تحقق'}, + 'referralDoctor': {'en': 'Referral Doctor', 'ar': 'الطبيب المُحول إليه'}, + 'referringClinic': {'en': 'Referring Clinic', 'ar': 'العيادة المُحول إليها'}, + 'frequency': {'en': 'Frequency', 'ar': 'نوع التحويلا'}, + 'priority': {'en': 'Priority', 'ar': 'الأولوية'}, + 'maxResponseTime': {'en': 'Max Response Time', 'ar': 'الوقت الأقصى للرد'}, + 'clinicDetailsandRemarks': { + 'en': 'Clinic Details and Remarks', + 'ar': 'ملاحضات وتفاصيل العيادة' + }, + 'answerSuggestions': { + 'en': 'Answer/Suggestions', + 'ar': 'ملاحضات وتفاصيل العيادة' + }, + 'outPatients': {'en': 'Out-Patients', 'ar': 'ةالمريض الخارجي'}, + 'searchPatient': {'en': 'Search Patient', 'ar': 'البحث عن مريض'}, + 'labResult': {'en': 'Lab Result', 'ar': 'نتيجة المختبر'}, + 'todayStatistics': {'en': 'Today Statistics', 'ar': 'إحصائيات اليوم'}, + 'arrived': {'en': 'Arrived', 'ar': 'وصل'}, + 'er': {'en': 'ER', 'ar': 'حالة طوارئ'}, + 'walkIn': {'en': 'Walk-in', 'ar': 'ادخل'}, + 'notArrived': {'en': 'Not Arrived', 'ar': 'لم يصل'}, + 'radiology': {'en': 'Radiology', 'ar': 'الأشعة'}, + 'referral': {'en': 'Referral', 'ar': 'االإحالة'}, + 'inPatient': {'en': 'In-Patient', 'ar': 'االمريض الداخلي'}, + 'operations': {'en': 'Operations', 'ar': 'عمليات'}, + 'patientServices': {'en': 'Patient Services', 'ar': 'خدمات المرضى'}, + 'searchMedicine': {'en': 'Search Medicine', 'ar': 'بحث عن الدواء'}, + 'myReferralPatient': {'en': 'My Referral Patient', 'ar': 'مرضى الاحالة'}, + 'myReferredPatient': {'en': 'My Referred Patient', 'ar': 'مرضاي المحالين'}, + 'firstName': {'en': 'First Name', 'ar': 'الاسم الاول'}, + 'middleName': {'en': 'Middle Name', 'ar': 'اسم الاب'}, + 'lastName': {'en': 'Last Name', 'ar': 'اسم العائلة'}, + 'phoneNumber': {'en': 'Phone Number ', 'ar': 'رقم الجوال'}, + 'patientID': {'en': 'Patient ID', 'ar': 'رقم المريض'}, + 'patientFile ': {'en': 'Patient File', 'ar': 'ملف المريض'}, }; diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index a00471df..18c9ca38 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -42,7 +42,7 @@ class _DashboardScreenState extends State { child: Scaffold( body: SingleChildScrollView( child: SizedBox( - height: MediaQuery.of(context).size.height*1.09, + height: MediaQuery.of(context).size.height * 1.09, // height: MediaQuery.of(context).size.height * 0.2, // width: SizeConfig.screenWidth * 0.9, child: Column( @@ -101,16 +101,17 @@ class _DashboardScreenState extends State { flex: 1, child: Column( crossAxisAlignment: - CrossAxisAlignment.stretch, + CrossAxisAlignment.stretch, children: [ Expanded( child: DashboardItemTexts( - TranslationBase.of(context).arrived, + TranslationBase.of(context).arrived, "23", )), Expanded( child: DashboardItemTexts( - TranslationBase.of(context).notArrived, + TranslationBase.of(context) + .notArrived, "23", ), ), @@ -119,18 +120,17 @@ class _DashboardScreenState extends State { ), Expanded( child: Column( - crossAxisAlignment: + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( child: DashboardItemTexts( - TranslationBase.of(context).er, + TranslationBase.of(context).er, "23", )), Expanded( child: DashboardItemTexts( - - TranslationBase.of(context).walkIn, + TranslationBase.of(context).walkIn, "23", )), ], @@ -286,7 +286,7 @@ class _DashboardScreenState extends State { child: DashboardItemIconText( DoctorApp.home_icon, "", - "Search Medicine", + TranslationBase.of(context).searchMedicine, showBorder: true, backgroundColor: Colors.white, valueFontColor: Colors.black, @@ -324,7 +324,7 @@ class _DashboardScreenState extends State { child: DashboardItemIconText( DoctorApp.home_icon, "", - "My Referral Patient", + TranslationBase.of(context).myReferralPatient, showBorder: true, backgroundColor: Colors.white, valueFontColor: Colors.black, @@ -359,7 +359,7 @@ class _DashboardScreenState extends State { child: DashboardItemIconText( DoctorApp.home_icon, "", - "My Referred Patient", + TranslationBase.of(context).myReferredPatient, showBorder: true, backgroundColor: Colors.white, valueFontColor: Colors.black, diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index dffe342c..3d906bef 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -18,6 +18,7 @@ import '../../lookups/patient_lookup.dart'; import '../../widgets/patients/dynamic_elements.dart'; import '../../config/config.dart'; import '../../models/doctor_profile_model.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); Helpers helpers = Helpers(); @@ -112,7 +113,7 @@ class _PatientSearchScreenState extends State { @override Widget build(BuildContext context) { return AppScaffold( - appBarTitle: "SEARCH FOR PATIENT", + appBarTitle: TranslationBase.of(context).searchPatient, body: ListView( children: [ RoundedContainer( @@ -199,7 +200,7 @@ class _PatientSearchScreenState extends State { height: 10, ), AppTextFormField( - hintText: 'First Name', + hintText: TranslationBase.of(context).firstName, onSaved: (value) { value == null ? _patientSearchFormValues.setFirstName = @@ -219,7 +220,7 @@ class _PatientSearchScreenState extends State { height: 10, ), AppTextFormField( - hintText: 'Middle Name', + hintText: TranslationBase.of(context).middleName, onSaved: (value) { value == null ? _patientSearchFormValues.setMiddleName = @@ -238,7 +239,7 @@ class _PatientSearchScreenState extends State { height: 10, ), AppTextFormField( - hintText: 'Last Name', + hintText: TranslationBase.of(context).lastName, onSaved: (value) { value == null ? _patientSearchFormValues.setLastName = "0" @@ -254,7 +255,7 @@ class _PatientSearchScreenState extends State { ), AppTextFormField( textInputType: TextInputType.number, - hintText: 'Phone Number', + hintText: TranslationBase.of(context).phoneNumber, // validator: (value) { // return TextValidator().validateMobile(value); // }, @@ -277,7 +278,7 @@ class _PatientSearchScreenState extends State { ), AppTextFormField( textInputType: TextInputType.number, - hintText: 'Patient ID', + hintText: TranslationBase.of(context).patientID, // inputFormatter: ONLY_NUMBERS, onSaved: (value) { @@ -296,7 +297,7 @@ class _PatientSearchScreenState extends State { ), AppTextFormField( textInputType: TextInputType.number, - hintText: 'Patient File', + hintText: TranslationBase.of(context).patientID, // validator: (value) { // return TextValidator().validateIdNumber(value); // }, @@ -399,7 +400,7 @@ class _PatientSearchScreenState extends State { alignment: WrapAlignment.center, children: [ AppButton( - title: "Search", + title: TranslationBase.of(context).patientID, color: Color(0xff58434F), onPressed: () { _validateInputs(); diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index c62f9cb7..4c96593c 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -13,9 +13,8 @@ class TranslationBase { return Localizations.of(context, TranslationBase); } - - - String get dashboardScreenToolbarTitle => localizedValues['dashboardScreenToolbarTitle'][locale.languageCode]; + String get dashboardScreenToolbarTitle => + localizedValues['dashboardScreenToolbarTitle'][locale.languageCode]; String get settings => localizedValues['settings'][locale.languageCode]; @@ -33,25 +32,33 @@ class TranslationBase { String get mobileNo => localizedValues['mobileNo'][locale.languageCode]; - String get messagesScreenToolbarTitle => localizedValues['messagesScreenToolbarTitle'][locale.languageCode]; + String get messagesScreenToolbarTitle => + localizedValues['messagesScreenToolbarTitle'][locale.languageCode]; String get mySchedule => localizedValues['mySchedule'][locale.languageCode]; - String get errorNoSchedule => localizedValues['errorNoSchedule'][locale.languageCode]; - + String get errorNoSchedule => + localizedValues['errorNoSchedule'][locale.languageCode]; String get verify => localizedValues['verify'][locale.languageCode]; - String get referralDoctor => localizedValues['referralDoctor'][locale.languageCode]; - String get referringClinic => localizedValues['referringClinic'][locale.languageCode]; + String get referralDoctor => + localizedValues['referralDoctor'][locale.languageCode]; + String get referringClinic => + localizedValues['referringClinic'][locale.languageCode]; String get frequency => localizedValues['frequency'][locale.languageCode]; String get priority => localizedValues['priority'][locale.languageCode]; - String get maxResponseTime => localizedValues['maxResponseTime'][locale.languageCode]; - String get clinicDetailsandRemarks=> localizedValues['clinicDetailsandRemarks'][locale.languageCode]; - String get answerSuggestions => localizedValues['answerSuggestions'][locale.languageCode]; + String get maxResponseTime => + localizedValues['maxResponseTime'][locale.languageCode]; + String get clinicDetailsandRemarks => + localizedValues['clinicDetailsandRemarks'][locale.languageCode]; + String get answerSuggestions => + localizedValues['answerSuggestions'][locale.languageCode]; String get outPatients => localizedValues['outPatients'][locale.languageCode]; - String get searchPatient => localizedValues['searchPatient'][locale.languageCode]; + String get searchPatient => + localizedValues['searchPatient'][locale.languageCode]; String get labResult => localizedValues['labResult'][locale.languageCode]; - String get todayStatistics => localizedValues['todayStatistics'][locale.languageCode]; + String get todayStatistics => + localizedValues['todayStatistics'][locale.languageCode]; String get arrived => localizedValues['arrived'][locale.languageCode]; String get er => localizedValues['er'][locale.languageCode]; String get walkIn => localizedValues['walkIn'][locale.languageCode]; @@ -60,8 +67,20 @@ class TranslationBase { String get referral => localizedValues['referral'][locale.languageCode]; String get inPatient => localizedValues['inPatient'][locale.languageCode]; String get operations => localizedValues['inPatient'][locale.languageCode]; - String get patientServices => localizedValues['patientServices'][locale.languageCode]; - + String get patientServices => + localizedValues['patientServices'][locale.languageCode]; + String get searchMedicine => + localizedValues['searchMedicine'][locale.languageCode]; + String get myReferralPatient => + localizedValues['myReferralPatient'][locale.languageCode]; + String get myReferredPatient => + localizedValues['myReferredPatient'][locale.languageCode]; + String get firstName => localizedValues['firstName'][locale.languageCode]; + String get middleName => localizedValues['middleName'][locale.languageCode]; + String get lastName => localizedValues['lastName'][locale.languageCode]; + String get phoneNumber => localizedValues['phoneNumber'][locale.languageCode]; + String get patientID => localizedValues['patientID'][locale.languageCode]; + String get patientFile => localizedValues['PatientFile'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { From dcbf1312b780ba041742cf1dba1f2c1183f67ff5 Mon Sep 17 00:00:00 2001 From: hussam alhababieh Date: Sun, 14 Jun 2020 12:05:43 +0300 Subject: [PATCH 2/9] translate dashboard/patient search --- lib/config/localized_values.dart | 9 +++++++-- lib/screens/patients/patient_search_screen.dart | 8 +++++--- lib/util/translations_delegate_base.dart | 5 ++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 1b05b5c6..33f184d2 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -49,6 +49,11 @@ const Map> localizedValues = { 'lastName': {'en': 'Last Name', 'ar': 'اسم العائلة'}, 'phoneNumber': {'en': 'Phone Number ', 'ar': 'رقم الجوال'}, 'patientID': {'en': 'Patient ID', 'ar': 'رقم المريض'}, - 'patientFile ': {'en': 'Patient File', 'ar': 'ملف المريض'}, - 'familyMedicine': {'en': 'Family Medicine Clinic', 'ar': 'عيادة طب الأسرة'} + 'patientFile': {'en': 'Patient File', 'ar': 'ملف المريض'}, + 'familyMedicine': {'en': 'Family Medicine Clinic', 'ar': 'عيادة طب الأسرة'}, + 'search': {'en': 'Search', 'ar': 'بحث'}, + 'onlyArrivedPatient': { + 'en': 'Only Arrived Patient', + 'ar': 'المريض الذي حضر للموعد' + }, }; diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index 924357c6..f020ca2e 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -307,7 +307,7 @@ class _PatientSearchScreenState extends State { ), AppTextFormField( textInputType: TextInputType.number, - hintText: TranslationBase.of(context).patientID, + hintText: TranslationBase.of(context).patientFile, // validator: (value) { // return TextValidator().validateIdNumber(value); // }, @@ -401,7 +401,9 @@ class _PatientSearchScreenState extends State { value: true, activeColor: Color(0xffFFDDD9), onChanged: (bool newValue) {}), - AppText('Only Arrived Patient', + AppText( + TranslationBase.of(context) + .onlyArrivedPatient, fontSize: SizeConfig.textMultiplier * 2), ])), SizedBox( @@ -420,7 +422,7 @@ class _PatientSearchScreenState extends State { alignment: WrapAlignment.center, children: [ AppButton( - title: TranslationBase.of(context).patientID, + title: TranslationBase.of(context).search, color: Color(0xff58434F), onPressed: () { _validateInputs(); diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 61b1034e..41a923f5 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -82,7 +82,10 @@ class TranslationBase { String get lastName => localizedValues['lastName'][locale.languageCode]; String get phoneNumber => localizedValues['phoneNumber'][locale.languageCode]; String get patientID => localizedValues['patientID'][locale.languageCode]; - String get patientFile => localizedValues['PatientFile'][locale.languageCode]; + String get patientFile => localizedValues['patientFile'][locale.languageCode]; + String get search => localizedValues['search'][locale.languageCode]; + String get onlyArrivedPatient => + localizedValues['onlyArrivedPatient'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { From d52429564dedf0ef8b2346a046dc3ac971e8a0cb Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Sun, 14 Jun 2020 12:13:43 +0300 Subject: [PATCH 3/9] fix issues in Patient --- lib/screens/patients/patients_screen.dart | 2 ++ lib/widgets/shared/app_scaffold_widget.dart | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/screens/patients/patients_screen.dart b/lib/screens/patients/patients_screen.dart index 68114a3d..96211046 100644 --- a/lib/screens/patients/patients_screen.dart +++ b/lib/screens/patients/patients_screen.dart @@ -102,8 +102,10 @@ class _PatientsScreenState extends State { } }); }).catchError((error) { + print(error); setState(() { _isError = true; + _isLoading = false; this.error = helpers.generateContactAdminMsg(error); }); }); diff --git a/lib/widgets/shared/app_scaffold_widget.dart b/lib/widgets/shared/app_scaffold_widget.dart index 263e3848..efdb0521 100644 --- a/lib/widgets/shared/app_scaffold_widget.dart +++ b/lib/widgets/shared/app_scaffold_widget.dart @@ -35,7 +35,7 @@ class AppScaffold extends StatelessWidget { IconButton( icon: Icon(DoctorApp.home_icon_active), color: Colors.white, //Colors.black, - onPressed: () => Navigator.pushReplacementNamed(context, HOME), + onPressed: () => Navigator.pushNamedAndRemoveUntil(context, HOME,(r) => false ), ), ], ) From 66627534a97ef3c724a26f90e988da43e2ada5c5 Mon Sep 17 00:00:00 2001 From: Amjad Amireh Date: Sun, 14 Jun 2020 12:46:40 +0300 Subject: [PATCH 4/9] Modify date in time in search patiant --- lib/widgets/patients/dynamic_elements.dart | 30 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/widgets/patients/dynamic_elements.dart b/lib/widgets/patients/dynamic_elements.dart index be66e88e..36808cb0 100644 --- a/lib/widgets/patients/dynamic_elements.dart +++ b/lib/widgets/patients/dynamic_elements.dart @@ -29,9 +29,28 @@ class _DynamicElementsState extends State { var selectedDate = DateFormat.yMd().format(pickedDate); if (id == '_selectedFromDate') { - _fromDateController.text = selectedDate; + // _fromDateController.text = selectedDate; + selectedDate = pickedDate.year.toString() + + "-" + + pickedDate.month.toString().padLeft(2, '0') + + "-" + + pickedDate.day.toString().padLeft(2, '0'); + + _fromDateController.text = selectedDate; + + + } else { + + + selectedDate = pickedDate.year.toString() + + "-" + + pickedDate.month.toString().padLeft(2, '0') + + "-" + + pickedDate.day.toString().padLeft(2, '0'); + _toDateController.text = selectedDate; + // _toDateController.text = selectedDate; } }); }); @@ -72,8 +91,11 @@ class _DynamicElementsState extends State { if (_fromDateController.text.toString().trim().isEmpty) { widget._patientSearchFormValues.From = "0"; } else { - widget._patientSearchFormValues.From = - _fromDateController.text; + widget._patientSearchFormValues.From = _fromDateController.text.replaceAll("/", "-"); + + + + // _fromDateController.text; } }, ), @@ -103,7 +125,7 @@ class _DynamicElementsState extends State { if (_toDateController.text.toString().trim().isEmpty) { widget._patientSearchFormValues.To = "0"; } else { - widget._patientSearchFormValues.To = _toDateController.text; + widget._patientSearchFormValues.To = _toDateController.text.replaceAll("/", "-"); } }, ), From 69173e8c46e4d15619d3978d7ff9186269cb7cac Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Sun, 14 Jun 2020 14:16:18 +0300 Subject: [PATCH 5/9] fix issues in login focus --- lib/widgets/auth/login_form.dart | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/widgets/auth/login_form.dart b/lib/widgets/auth/login_form.dart index 2d2d2bfd..17b5520d 100644 --- a/lib/widgets/auth/login_form.dart +++ b/lib/widgets/auth/login_form.dart @@ -37,8 +37,8 @@ class _LoginFormState extends State { String uniqueId = "Unknown"; var projectsList = []; bool _isInit = true; - FocusNode focusPass; - FocusNode focusProject; + FocusNode focusPass = FocusNode(); + FocusNode focusProject = FocusNode(); var userInfo = UserModel( UserID: '', @@ -72,8 +72,7 @@ class _LoginFormState extends State { @override Widget build(BuildContext context) { - final focusPass = FocusNode(); - final focusProject = FocusNode(); + AuthProvider authProv = Provider.of(context); @@ -100,7 +99,7 @@ class _LoginFormState extends State { userInfo.UserID = value.trim(); }, onFieldSubmitted: (_) { - FocusScope.of(context).nextFocus(); + focusPass.nextFocus(); }, autofocus: false, ), @@ -121,7 +120,7 @@ class _LoginFormState extends State { userInfo.Password = value; }, onFieldSubmitted: (_) { - FocusScope.of(context).nextFocus(); + focusPass.nextFocus(); helpers.showCupertinoPicker( context, projectsList, 'Name', onSelectProject); }, From 0dad77bfa286216f62d50cf87be3d57299d1aca5 Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Sun, 14 Jun 2020 15:12:38 +0300 Subject: [PATCH 6/9] fix issues in login --- lib/providers/auth_provider.dart | 37 ++++++++++++++++++++++ lib/root_page.dart | 38 +++++++++++++++++++++++ lib/routes.dart | 5 ++- lib/util/helpers.dart | 2 +- lib/widgets/shared/app_drawer_widget.dart | 4 ++- 5 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 lib/root_page.dart diff --git a/lib/providers/auth_provider.dart b/lib/providers/auth_provider.dart index e79192ae..415b8d39 100644 --- a/lib/providers/auth_provider.dart +++ b/lib/providers/auth_provider.dart @@ -1,4 +1,6 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; +import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:flutter/cupertino.dart'; import '../models/user_model.dart'; @@ -14,8 +16,41 @@ const SEND_ACTIVATION_CODE_BY_OTP_NOTIFICATION_TYPE = const MEMBER_CHECK_ACTIVATION_CODE_NEW = 'Sentry.svc/REST/MemberCheckActivationCode_New'; const GET_DOC_PROFILES = 'Doctors.svc/REST/GetDocProfiles'; +DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); +enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED } + class AuthProvider with ChangeNotifier { + + bool isLogin= false; + bool isLoading = true; + AuthProvider(){ + getUserAuthentication(); + } + + void getUserAuthentication() async{ + Map profile = await sharedPref.getObj(DOCTOR_PROFILE); + if(profile != null) + { + isLoading = false; + isLogin = true; + } else { + isLoading = false; + isLogin = false; + } + notifyListeners(); + } + APP_STATUS get stutas { + if (isLoading) { + return APP_STATUS.LOADING; + } else{ + if ( this.isLogin) { + return APP_STATUS.AUTHENTICATED; + } else { + return APP_STATUS.UNAUTHENTICATED; + } + } + } Future login(UserModel userInfo) async { try { dynamic localRes; @@ -131,4 +166,6 @@ class AuthProvider with ChangeNotifier { throw error; } } + + } diff --git a/lib/root_page.dart b/lib/root_page.dart new file mode 100644 index 00000000..a784183b --- /dev/null +++ b/lib/root_page.dart @@ -0,0 +1,38 @@ +import 'package:doctor_app_flutter/providers/auth_provider.dart'; +import 'package:doctor_app_flutter/screens/auth/login_screen.dart'; +import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import 'landing_page.dart'; + +class RootPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + AuthProvider authProvider = Provider.of(context); + + Widget buildRoot() { + switch (authProvider.stutas) { + case APP_STATUS.LOADING: + return Scaffold( + body: Center( + child: DrAppCircularProgressIndeicator(), + ), + ); + break; + case APP_STATUS.UNAUTHENTICATED: + return Loginsreen(); + break; + case APP_STATUS.AUTHENTICATED: + return LandingPage(); + break; + } + } + + return AnimatedSwitcher( + duration: Duration(microseconds: 350), + child: buildRoot(), + ); + } +} diff --git a/lib/routes.dart b/lib/routes.dart index 34d3224d..cd5b3187 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,5 +1,6 @@ import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/root_page.dart'; import 'package:doctor_app_flutter/screens/patients/profile/insurance_approvals_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/patient_orders_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/progress_note_screen.dart'; @@ -38,7 +39,8 @@ import './screens/settings/settings_screen.dart'; import 'landing_page.dart'; import 'screens/doctor/doctor_reply_screen.dart'; -const String INIT_ROUTE = LOGIN; +const String INIT_ROUTE = ROOT; +const String ROOT = 'root'; const String HOME = '/'; const String LOGIN = 'login'; const String PROFILE = 'profile'; @@ -71,6 +73,7 @@ const String BODY_MEASUREMENTS = 'patients/body-measurements'; const String IN_PATIENT_PRESCRIPTIONS_DETAILS = 'patients/prescription-details'; var routes = { + ROOT: (_) => RootPage(), HOME: (_) => LandingPage(), LOGIN: (_) => Loginsreen(), PROFILE: (_) => ProfileScreen(), diff --git a/lib/util/helpers.dart b/lib/util/helpers.dart index ebcf817c..aa92b253 100644 --- a/lib/util/helpers.dart +++ b/lib/util/helpers.dart @@ -335,7 +335,7 @@ class Helpers { return localMsg; } - clearSharedPref() async { + static clearSharedPref() async { await sharedPref.clear(); } diff --git a/lib/widgets/shared/app_drawer_widget.dart b/lib/widgets/shared/app_drawer_widget.dart index 919dc939..b2cd3dd9 100644 --- a/lib/widgets/shared/app_drawer_widget.dart +++ b/lib/widgets/shared/app_drawer_widget.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -105,7 +106,8 @@ class _AppDrawerState extends State { ), InkWell( child: DrawerItem("lOGOUT", Icons.exit_to_app), - onTap: () { + onTap: () async { + await Helpers.clearSharedPref(); Navigator.pop(context); Navigator.of(context).pushNamed(LOGIN); }, From 6fd43a281d3a4840e1baa1b0bd33a4d7c2722fa2 Mon Sep 17 00:00:00 2001 From: ibrahim albitar Date: Sun, 14 Jun 2020 16:02:44 +0300 Subject: [PATCH 7/9] fixing --- lib/providers/patients_provider.dart | 84 +++++------- .../profile/refer_patient_screen.dart | 128 ++++++++++++------ lib/widgets/shared/app_text_form_field.dart | 4 +- 3 files changed, 122 insertions(+), 94 deletions(-) diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index 6da89e74..2d1f4fe1 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -63,7 +63,7 @@ class PatientsProvider with ChangeNotifier { STPReferralFrequencyRequest(); ClinicByProjectIdRequest _clinicByProjectIdRequest = ClinicByProjectIdRequest(); - ReferToDoctorRequest _referToDoctorRequest = ReferToDoctorRequest(); + ReferToDoctorRequest _referToDoctorRequest; PatiantInformtion _selectedPatient; @@ -486,7 +486,7 @@ class PatientsProvider with ChangeNotifier { *@Date:3/6/2020 *@desc: referToDoctor */ - referToDoctor(context, + referToDoctor(context, {String selectedDoctorID, String selectedClinicID, int admissionNo, @@ -500,56 +500,42 @@ class PatientsProvider with ChangeNotifier { int projectID}) async { setBasicData(); try { - if (await Helpers.checkConnection()) { - String token = await sharedPref.getString(TOKEN); - Map profile = await sharedPref.getObj(DOCTOR_PROFILE); - DoctorProfileModel doctorProfile = - new DoctorProfileModel.fromJson(profile); - int doctorID = doctorProfile.doctorID; - int clinicId = doctorProfile.clinicID; - _referToDoctorRequest = ReferToDoctorRequest( - projectID: projectID, - admissionNo: admissionNo, - roomID: roomID, - referralClinic: selectedClinicID.toString(), - referralDoctor: selectedDoctorID.toString(), - createdBy: doctorID, - editedBy: doctorID, - patientID: patientID, - patientTypeID: patientTypeID, - referringClinic: clinicId, - referringDoctor: doctorID, - referringDoctorRemarks: referringDoctorRemarks, - priority: priority, - frequency: frequency, - extension: extension, - tokenID: token); - - final response = await AppClient.post(PATIENT_REFER_TO_DOCTOR_URL, - body: json.encode(_referToDoctorRequest)); - final int statusCode = response.statusCode; - isLoading = false; - - if (statusCode < 200 || statusCode >= 400 || json == null) { - isError = true; - error = 'Error While Fetching data'; - } else { - var res = json.decode(response.body); - print('$res'); - if (res['MessageStatus'] == 1) { - print('Done : \n $res'); + String token = await sharedPref.getString(TOKEN); + Map profile = await sharedPref.getObj(DOCTOR_PROFILE); + DoctorProfileModel doctorProfile = + new DoctorProfileModel.fromJson(profile); + int doctorID = doctorProfile.doctorID; + int clinicId = doctorProfile.clinicID; + _referToDoctorRequest = ReferToDoctorRequest( + projectID: projectID, + admissionNo: admissionNo, + roomID: roomID, + referralClinic: selectedClinicID.toString(), + referralDoctor: selectedDoctorID.toString(), + createdBy: doctorID, + editedBy: doctorID, + patientID: patientID, + patientTypeID: patientTypeID, + referringClinic: clinicId, + referringDoctor: doctorID, + referringDoctorRemarks: referringDoctorRemarks, + priority: priority, + frequency: frequency, + extension: extension, + tokenID: token); + await BaseAppClient.post(PATIENT_REFER_TO_DOCTOR_URL, + onSuccess: (dynamic response, int statusCode) { + // print('Done : \n $res'); Navigator.pop(context); - } else { + }, + onFailure: (String error, int statusCode) { + isLoading = false; isError = true; - error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; - } - } - } else { - isLoading = false; - isError = true; - error = 'Please Check The Internet Connection'; - } + this.error = error; + }, + body: _referToDoctorRequest.toJson()); notifyListeners(); + } catch (err) { handelCatchErrorCase(err); } diff --git a/lib/screens/patients/profile/refer_patient_screen.dart b/lib/screens/patients/profile/refer_patient_screen.dart index 24146ca5..1da89f97 100644 --- a/lib/screens/patients/profile/refer_patient_screen.dart +++ b/lib/screens/patients/profile/refer_patient_screen.dart @@ -15,6 +15,7 @@ import '../../../util/dr_app_shared_pref.dart'; import '../../../widgets/shared/app_scaffold_widget.dart'; import '../../../widgets/shared/app_texts_widget.dart'; import '../../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; +import '../../../util/extenstions.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); @@ -37,6 +38,7 @@ class _ReferPatientState extends State { final _remarksController = TextEditingController(); final _extController = TextEditingController(); var _isInit = true; + bool isValid; var clinicId; var doctorId; @@ -49,14 +51,17 @@ class _ReferPatientState extends State { List _priorities = ['Very Urgent', 'Urgent', 'Routine']; int _activePriority = 2; + FocusNode myFocusNode; + @override void didChangeDependencies() { super.didChangeDependencies(); if (_isInit) { + myFocusNode = FocusNode(); doctorsList = null; patientsProv = Provider.of(context); patientsProv.getClinicsList(); - patientsProv.getReferralFrequancyList(); + patientsProv.getReferralFrequancyList(); } _isInit = false; } @@ -70,10 +75,9 @@ class _ReferPatientState extends State { : patientsProv.isError ? DrAppEmbeddedError(error: patientsProv.error) : patientsProv.clinicsList == null - ? DrAppEmbeddedError( - error: 'Something Wrong!') + ? DrAppEmbeddedError(error: 'Something Wrong!') : SingleChildScrollView( - child: Column( + child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -128,13 +132,17 @@ class _ReferPatientState extends State { setState(() { _selectedDoctor = null; _selectedClinic = newValue; - var clinicInfo = patientsProv.clinicsList.where((i) => + var clinicInfo = patientsProv + .clinicsList + .where((i) => i['ClinicDescription'] .toString() - .contains(_selectedClinic)).toList(); - - clinicId = - clinicInfo[0]['ClinicID'].toString(); + .contains( + _selectedClinic)) + .toList(); + + clinicId = clinicInfo[0]['ClinicID'] + .toString(); patientsProv.getDoctorsList(clinicId); }) @@ -208,15 +216,16 @@ class _ReferPatientState extends State { onChanged: (newValue) => { setState(() { _selectedDoctor = newValue; - doctorsList = patientsProv.doctorsList; - - var doctorInfo = - doctorsList.where((i) => - i['DoctorName'] - .toString() - .contains(_selectedDoctor)).toList(); - doctorId = doctorInfo[0]['DoctorID'].toString(); - + doctorsList = + patientsProv.doctorsList; + + var doctorInfo = doctorsList + .where((i) => i['DoctorName'] + .toString() + .contains(_selectedDoctor)) + .toList(); + doctorId = doctorInfo[0]['DoctorID'] + .toString(); }) }, items: patientsProv @@ -320,13 +329,16 @@ class _ReferPatientState extends State { onChanged: (newValue) => { setState(() { _selectedReferralFrequancy = newValue; - var freqInfo = - patientsProv.referalFrequancyList.singleWhere((i) => - i['Description'] - .toString() - .contains(_selectedReferralFrequancy)); - freqId = - freqInfo['ParameterCode'].toString(); + var freqInfo = patientsProv + .referalFrequancyList + .singleWhere((i) => i[ + 'Description'] + .toString() + .contains( + _selectedReferralFrequancy)); + freqId = freqInfo['ParameterCode'] + .toString(); + myFocusNode.requestFocus(); }) }, items: patientsProv @@ -357,6 +369,7 @@ class _ReferPatientState extends State { padding: const EdgeInsets.all(10.0), child: AppTextFormField( hintText: "Remarks", + focusNode: myFocusNode, controller: _remarksController, inputFormatter: ONLY_LETTERS, textInputType: TextInputType.text, @@ -364,14 +377,27 @@ class _ReferPatientState extends State { ), ), Padding( - padding: const EdgeInsets.all(20.0), - child: AppButton(title: "Send", color: Color(PRIMARY_COLOR),onPressed: ()=>{ - referToDoctor(context) - },), - ) + padding: const EdgeInsets.all(20.0), + child: Column( + children: [ + AppText( + "Please fill all fields..!", + color: Colors.red, + fontWeight: FontWeight.bold, + margin: 10, + visibility: + isValid == null ? false : !isValid, + ), + AppButton( + title: "Send", + color: Color(PRIMARY_COLOR), + onPressed: () => {referToDoctor(context)}, + ) + ], + )) ], ), - ), + ), ); } @@ -456,21 +482,35 @@ class _ReferPatientState extends State { return time; } - void referToDoctor(context){ + void referToDoctor(context) { + if (!validation()) { + return; + } + final routeArgs = ModalRoute.of(context).settings.arguments as Map; PatiantInformtion patient = routeArgs['patient']; patientsProv.referToDoctor(context, - extension: _extController.value.text, - admissionNo:int.parse( patient.admissionNo), - referringDoctorRemarks: _remarksController.value.text, - frequency: freqId, - patientID: patient.patientId, - patientTypeID: patient.patientType, - priority: (_activePriority + 1).toString(), - roomID: patient.roomId, - selectedClinicID: clinicId.toString(), - selectedDoctorID: doctorId.toString(), - projectID: patient.projectId - ); + extension: _extController.value.text, + admissionNo: int.parse(patient.admissionNo), + referringDoctorRemarks: _remarksController.value.text, + frequency: freqId, + patientID: patient.patientId, + patientTypeID: patient.patientType, + priority: (_activePriority + 1).toString(), + roomID: patient.roomId, + selectedClinicID: clinicId.toString(), + selectedDoctorID: doctorId.toString(), + projectID: patient.projectId); + } + + bool validation() { + setState(() { + isValid = !_extController.value.text.isNullOrEmpty() && + !_remarksController.value.text.isNullOrEmpty() && + freqId != null && + clinicId != null && + doctorId != null; + }); + return isValid; } } diff --git a/lib/widgets/shared/app_text_form_field.dart b/lib/widgets/shared/app_text_form_field.dart index fd50ad66..06dfb9e7 100644 --- a/lib/widgets/shared/app_text_form_field.dart +++ b/lib/widgets/shared/app_text_form_field.dart @@ -18,7 +18,8 @@ class AppTextFormField extends FormField { TextEditingController controller, bool autovalidate = true, TextInputType textInputType, - String hintText + String hintText, + FocusNode focusNode }) : super( onSaved: onSaved, validator: validator, @@ -27,6 +28,7 @@ class AppTextFormField extends FormField { return Column( children: [ TextFormField( + focusNode: focusNode, keyboardType: textInputType, inputFormatters: [WhitelistingTextInputFormatter(RegExp(inputFormatter)),], onChanged: onChanged?? (value){ From 8da67db69fa85a29c10eb11c80c19ed0c268a77b Mon Sep 17 00:00:00 2001 From: ibrahim albitar Date: Sun, 14 Jun 2020 16:38:38 +0300 Subject: [PATCH 8/9] fix patient type dropdown --- lib/config/config.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index 2bd1256d..1a4b5694 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -24,7 +24,7 @@ const GET_PATIENT_LAB_OREDERS = const GET_PRESCRIPTION = 'Patients.svc/REST/GetPrescriptionApptList'; const GET_RADIOLOGY = 'DoctorApplication.svc/REST/GetPatientRadResult'; -var selectedPatientType = 0; +var selectedPatientType = 1; //*********change value to decode json from Dropdown ************ var SERVICES_PATIANT = [ From 94dbecca4a087215c8e995908cca146988af1fc9 Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Sun, 14 Jun 2020 17:03:00 +0300 Subject: [PATCH 9/9] fix issues in login --- lib/main.dart | 2 ++ lib/root_page.dart | 2 +- lib/widgets/shared/app_scaffold_widget.dart | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index 470c5d52..d5f65406 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,6 +11,7 @@ import './providers/auth_provider.dart'; import './providers/patients_provider.dart'; import './providers/hospital_provider.dart'; import './routes.dart'; +import 'config/config.dart'; void main() => runApp(MyApp()); @@ -18,6 +19,7 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { + AppGlobal.CONTEX = context; return LayoutBuilder( builder: (context, constraints) { return OrientationBuilder(builder: (context, orientation) { diff --git a/lib/root_page.dart b/lib/root_page.dart index a784183b..e361e42c 100644 --- a/lib/root_page.dart +++ b/lib/root_page.dart @@ -5,13 +5,13 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'config/config.dart'; import 'landing_page.dart'; class RootPage extends StatelessWidget { @override Widget build(BuildContext context) { AuthProvider authProvider = Provider.of(context); - Widget buildRoot() { switch (authProvider.stutas) { case APP_STATUS.LOADING: diff --git a/lib/widgets/shared/app_scaffold_widget.dart b/lib/widgets/shared/app_scaffold_widget.dart index efdb0521..824ba11b 100644 --- a/lib/widgets/shared/app_scaffold_widget.dart +++ b/lib/widgets/shared/app_scaffold_widget.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; @@ -13,6 +14,7 @@ class AppScaffold extends StatelessWidget { @override Widget build(BuildContext context) { + AppGlobal.CONTEX = context; return Scaffold( backgroundColor: Hexcolor('#F5F5F5'), appBar: appBarTitle != ''