diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 46d7599e..9c86879d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -292,4 +292,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 649616dc336b3659ac6b2b25159d8e488e042b69 -COCOAPODS: 1.10.1 +COCOAPODS: 1.10.0.rc.1 diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index 30dc2700..9f28c010 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -136,6 +136,7 @@ class _DashboardScreenState extends State { Stack(children: [ Column( children: [ + if(false) ProfileWelcomeWidget( InkWell( onTap: () async { diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 499cade9..09a3c3be 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1106,6 +1106,7 @@ class TranslationBase { String get admissionRequestSuccessMsg => localizedValues['admissionRequestSuccessMsg'][locale.languageCode]; String get infoStatus => localizedValues['infoStatus'][locale.languageCode]; String get doctorResponse => localizedValues['doctorResponse'][locale.languageCode]; + } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_medication_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_medication_widget.dart index 81f49ffa..f32bfe6e 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_medication_widget.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_medication_widget.dart @@ -1,6 +1,7 @@ import 'package:autocomplete_textfield/autocomplete_textfield.dart'; import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; +import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; @@ -13,18 +14,19 @@ 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_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/master_key_dailog.dart'; -import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart'; import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; import '../custom_validation_error.dart'; class UpdateMedicationWidget extends StatefulWidget { - final List myAllergiesList; + final TextEditingController medicationController; - UpdateMedicationWidget({Key key, this.myAllergiesList}); + UpdateMedicationWidget({ + Key key, + this.medicationController, + }); @override _UpdateMedicationWidgetState createState() => _UpdateMedicationWidgetState(); @@ -43,7 +45,7 @@ class _UpdateMedicationWidgetState extends State { hintText: TranslationBase.of(context).addMedication, fontSize: 13.5, onTapTextFields: () { - openAllergiesList(context); + openMedicationList(context); }, readOnly: true, // hintColor: Colors.black, @@ -62,195 +64,57 @@ class _UpdateMedicationWidgetState extends State { ), SizedBox( height: 20, - ), - Container( - margin: - EdgeInsets.only(left: 15, right: 15, top: 15), - child: Column( - children: widget.myAllergiesList.map((selectedAllergy) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - child: Texts( - projectViewModel.isArabic - ? selectedAllergy.selectedAllergy.nameAr - : selectedAllergy.selectedAllergy.nameEn - .toUpperCase(), - variant: "bodyText", - textDecoration: selectedAllergy.isChecked - ? null - : TextDecoration.lineThrough, - bold: true, - color: Colors.black), - width: MediaQuery - .of(context) - .size - .width * 0.5, - ), - Texts( - projectViewModel.isArabic - ? selectedAllergy.selectedAllergySeverity - .nameAr - : selectedAllergy.selectedAllergySeverity - .nameEn - .toUpperCase(), - variant: "bodyText", - textDecoration: selectedAllergy.isChecked - ? null - : TextDecoration.lineThrough, - bold: true, - color: AppGlobal.appPrimaryColor), - if (selectedAllergy.isChecked) - InkWell( - child: Icon( - FontAwesomeIcons.trash, - color: Colors.grey, - size: 20, - ), - onTap: () => removeAllergy(selectedAllergy), - ) - ], - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: Row( - children: [ - AppText( - selectedAllergy.remark != null && - selectedAllergy.remark != '' - ? TranslationBase - .of(context) - .remarks + " : " - : '', - fontWeight: FontWeight.bold, - fontSize: 13, - ), - Container( - width: MediaQuery - .of(context) - .size - .width * 0.55, - child: AppText( - selectedAllergy.remark ?? '', - fontSize: 10, - color: Colors.grey, - ), - ), - ], - ), - ), - DividerWithSpacesAround() - ], - ), - SizedBox( - height: 10, - ), - ], - ); - }).toList()), ) ], ); } - removeAllergy(MySelectedAllergy mySelectedAllergy) { - List allergy = - // ignore: missing_return - widget.myAllergiesList.where((element) => - mySelectedAllergy.selectedAllergySeverity.id == - element.selectedAllergySeverity.id && - mySelectedAllergy.selectedAllergy.id == element.selectedAllergy.id - ).toList(); - - if (allergy.length > 0) { - setState(() { - allergy[0].isChecked = false; - }); - } - - print(allergy); - } - - openAllergiesList(BuildContext context) { + openMedicationList(BuildContext context) { showModalBottomSheet( backgroundColor: Colors.white, isScrollControlled: true, context: context, builder: (context) { - return AddAllergies( - addAllergiesFun: (MySelectedAllergy mySelectedAllergy) { - if (mySelectedAllergy.selectedAllergySeverity == null || - mySelectedAllergy.selectedAllergy == null) { - helpers.showErrorToast(TranslationBase - .of(context) - .requiredMsg); - } else { - setState(() { - List allergy = - // ignore: missing_return - widget.myAllergiesList - .where((element) => - mySelectedAllergy.selectedAllergy.id == - element.selectedAllergy.id) - .toList(); - - if (allergy.isEmpty) { - widget.myAllergiesList.add(mySelectedAllergy); - Navigator.of(context).pop(); - } else { - allergy.first.selectedAllergy = - mySelectedAllergy.selectedAllergy; - allergy.first.selectedAllergySeverity = - mySelectedAllergy.selectedAllergySeverity; - allergy.first.remark = mySelectedAllergy.remark; - allergy.first.isChecked = mySelectedAllergy.isChecked; - Navigator.of(context).pop(); - - // helpers.showErrorToast(TranslationBase - // .of(context) - // .itemExist); - } - }); - } - },); + return AddMedication( + addMedicationFun: (MySelectedAllergy mySelectedAllergy) {}, + medicationController: widget.medicationController, + ); }); } - } -class AddAllergies extends StatefulWidget { - final Function addAllergiesFun; +// ignore: must_be_immutable +class AddMedication extends StatefulWidget { + final Function addMedicationFun; + TextEditingController medicationController; - const AddAllergies({Key key, this.addAllergiesFun}) : super(key: key); + AddMedication({Key key, this.addMedicationFun, this.medicationController}) + : super(key: key); @override - _AddAllergiesState createState() => _AddAllergiesState(); + _AddMedicationState createState() => _AddMedicationState(); } -class _AddAllergiesState extends State { - List allergiesList; - List allergySeverityList; - MasterKeyModel _selectedMedicationStrengthSeverity; - MasterKeyModel _selectedAllergy; - TextEditingController remarkController = TextEditingController(); - TextEditingController severityController = TextEditingController(); - TextEditingController allergyController = TextEditingController(); +class _AddMedicationState extends State { + MasterKeyModel _selectedMedicationDose; + MasterKeyModel _selectedMedicationStrength; + MasterKeyModel _selectedMedicationRoute; + MasterKeyModel _selectedMedicationFrequency; - GlobalKey key = new GlobalKey>(); + MasterKeyModel _selectedAllergy; + TextEditingController doseController = TextEditingController(); + TextEditingController strengthController = TextEditingController(); + TextEditingController routeController = TextEditingController(); + TextEditingController frequencyController = TextEditingController(); + GetMedicationResponseModel _selectedMedication; + + GlobalKey key = + new GlobalKey>(); bool isFormSubmitted = false; - InputDecoration textFieldSelectorDecoration(String hintText, - String selectedText, bool isDropDown, + InputDecoration textFieldSelectorDecoration( + String hintText, String selectedText, bool isDropDown, {IconData icon}) { return InputDecoration( contentPadding: EdgeInsets.symmetric(vertical: 10, horizontal: 10), @@ -321,7 +185,7 @@ class _AddAllergiesState extends State { AppText( TranslationBase .of(context) - .addAllergies, + .addMedication, fontWeight: FontWeight.bold, fontSize: 16, ), @@ -331,109 +195,90 @@ class _AddAllergiesState extends State { Container( height: screenSize.height * 0.070, child: InkWell( - onTap: model.allergiesList != null - ? () { - setState(() { - _selectedAllergy = null; - allergyController.text = null; - }); - } - : null, - child: _selectedAllergy == null - ? AutoCompleteTextField( - decoration: textFieldSelectorDecoration( - TranslationBase - .of(context) - .selectAllergy, - _selectedAllergy != null - ? _selectedAllergy.nameEn - : null, true, - icon: EvaIcons.search), - itemSubmitted: (item) => - setState(() { - _selectedAllergy = item; - allergyController.text = - projectViewModel.isArabic - ? _selectedAllergy - .nameAr - : _selectedAllergy - .nameEn; - }), - key: key, - suggestions: model.allergiesList, - itemBuilder: (context, suggestion) => - new Padding( - child: Texts( - projectViewModel.isArabic - ? suggestion - .nameAr - : suggestion.nameEn), - padding: EdgeInsets.all(2.0)), - itemSorter: (a, b) => 1, - itemFilter: (suggestion, input) => - suggestion.nameAr.toLowerCase().startsWith( - input.toLowerCase()) || - suggestion.nameEn.toLowerCase() - .startsWith(input.toLowerCase()), - ) - : - TextFields( - onTapTextFields: model.allergiesList != - null - ? () { - setState(() { - _selectedAllergy = null; - allergyController.text = null; - }); - } + onTap: model.allMedicationList != null + ? () { + setState(() { + _selectedMedication = null; + }); + } + : null, + child: _selectedMedication == null + ? AutoCompleteTextField< + GetMedicationResponseModel>( + decoration: textFieldSelectorDecoration( + TranslationBase + .of(context) + .searchMedicineNameHere, + _selectedMedication != null + ? _selectedMedication.genericName : null, - hasLabelText: allergyController.text != - '' ? true : false, - showLabelText: true, - hintText: TranslationBase + true, + icon: EvaIcons.search), + itemSubmitted: (item) => + setState( + () => _selectedMedication = item), + key: key, + suggestions: model.allMedicationList, + itemBuilder: (context, suggestion) => + new Padding( + child: Texts( + suggestion.description + '/' + + suggestion.genericName), + padding: EdgeInsets.all(8.0)), + itemSorter: (a, b) => 1, + itemFilter: (suggestion, input) => + suggestion.genericName + .toLowerCase() + .startsWith(input.toLowerCase()) || + suggestion.description + .toLowerCase() + .startsWith(input.toLowerCase()) || + suggestion.keywords + .toLowerCase() + .startsWith(input.toLowerCase()), + ) + : TextField( + minLines: 2, + maxLines: 2, + decoration: textFieldSelectorDecoration( + TranslationBase .of(context) - .selectAllergy, - fontSize: 13.5, - readOnly: true, - fontWeight: FontWeight.w600, - maxLines: 2, - minLines: 1, - controller: allergyController, - suffixIcon: EvaIcons.search, - validator: (value) { - if (value == null) - return TranslationBase - .of(context) - .emptyMessage; - else - return null; - }) + .searchMedicineNameHere, + _selectedMedication != null + ? _selectedMedication.description + + (' (${_selectedMedication + .genericName} )') + : null, + true, + icon: EvaIcons.search), + enabled: false, + ), ), ), - if(isFormSubmitted && _selectedAllergy == null) + if(isFormSubmitted && _selectedMedication == null) CustomValidationError(), SizedBox( - height: 10, + height: 5, ), TextFields( - onTapTextFields: model - .medicationStrengthList != null + onTapTextFields: model.medicationDoseTimeList != + null ? () { MasterKeyDailog dialog = MasterKeyDailog( - list: model.medicationStrengthList, + list: model.medicationDoseTimeList, okText: TranslationBase .of(context) .ok, okFunction: (selectedValue) { setState(() { - _selectedMedicationStrengthSeverity = + _selectedMedicationDose = selectedValue; - severityController.text = + doseController.text = projectViewModel.isArabic - ? _selectedMedicationStrengthSeverity + ? _selectedMedicationDose .nameAr - : _selectedMedicationStrengthSeverity + : _selectedMedicationDose .nameEn; }); }, @@ -447,10 +292,12 @@ class _AddAllergiesState extends State { ); } : null, - hasLabelText: severityController.text != + hasLabelText: doseController.text != '' ? true : false, showLabelText: true, - hintText: "Strength", + hintText: TranslationBase + .of(context) + .doseTime, //TODO add translation fontSize: 13.5, readOnly: true, @@ -458,7 +305,7 @@ class _AddAllergiesState extends State { fontWeight: FontWeight.w600, maxLines: 2, minLines: 1, - controller: severityController, + controller: doseController, validator: (value) { if (value == null) return TranslationBase @@ -471,26 +318,29 @@ class _AddAllergiesState extends State { height: 5, ), if(isFormSubmitted && - _selectedMedicationStrengthSeverity == null) - CustomValidationError(), TextFields( - onTapTextFields: model.medicationDoseTimeList != - null + _selectedMedicationDose == null) + CustomValidationError(), SizedBox( + height: 5, + ), + TextFields( + onTapTextFields: model + .medicationStrengthList != null ? () { MasterKeyDailog dialog = MasterKeyDailog( - list: model.medicationDoseTimeList, + list: model.medicationStrengthList, okText: TranslationBase .of(context) .ok, okFunction: (selectedValue) { setState(() { - _selectedMedicationStrengthSeverity = + _selectedMedicationStrength = selectedValue; - severityController.text = + strengthController.text = projectViewModel.isArabic - ? _selectedMedicationStrengthSeverity + ? _selectedMedicationStrength .nameAr - : _selectedMedicationStrengthSeverity + : _selectedMedicationStrength .nameEn; }); }, @@ -504,18 +354,19 @@ class _AddAllergiesState extends State { ); } : null, - hasLabelText: severityController.text != + hasLabelText: strengthController.text != '' ? true : false, showLabelText: true, - hintText: "Dose Time", - //TODO add translation + hintText: TranslationBase + .of(context) + .strength, fontSize: 13.5, readOnly: true, // hintColor: Colors.black, fontWeight: FontWeight.w600, maxLines: 2, minLines: 1, - controller: severityController, + controller: strengthController, validator: (value) { if (value == null) return TranslationBase @@ -527,35 +378,94 @@ class _AddAllergiesState extends State { height: 5, ), if(isFormSubmitted && - _selectedMedicationStrengthSeverity == null) + _selectedMedicationStrength == null) CustomValidationError(), SizedBox( - height: 10, + height: 5, ), + TextFields( + onTapTextFields: model + .medicationRouteList != null + ? () { + MasterKeyDailog dialog = MasterKeyDailog( + list: model.medicationRouteList, + okText: TranslationBase + .of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + _selectedMedicationRoute = + selectedValue; + + routeController.text = + projectViewModel.isArabic + ? _selectedMedicationRoute + .nameAr + : _selectedMedicationRoute + .nameEn; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + hasLabelText: routeController.text != + '' ? true : false, + showLabelText: true, + hintText: TranslationBase + .of(context) + .route, + fontSize: 13.5, + readOnly: true, + // hintColor: Colors.black, + fontWeight: FontWeight.w600, + maxLines: 2, + minLines: 1, + controller: routeController, + validator: (value) { + if (value == null) + return TranslationBase + .of(context) + .emptyMessage; + else + return null; + }), SizedBox( - height: 10, + height: 5, + ), + if(isFormSubmitted && + _selectedMedicationRoute == null) + CustomValidationError(), + SizedBox( + height: 5, ), TextFields( onTapTextFields: model - .medicationStrengthList != null + .medicationFrequencyList != null ? () { MasterKeyDailog dialog = MasterKeyDailog( - list: model.medicationStrengthList, + list: model.medicationFrequencyList, okText: TranslationBase .of(context) .ok, okFunction: (selectedValue) { setState(() { - _selectedMedicationStrengthSeverity = + _selectedMedicationFrequency = selectedValue; - severityController.text = + frequencyController.text = projectViewModel.isArabic - ? _selectedMedicationStrengthSeverity + ? _selectedMedicationFrequency .nameAr - : _selectedMedicationStrengthSeverity + : _selectedMedicationFrequency .nameEn; }); }, @@ -569,10 +479,12 @@ class _AddAllergiesState extends State { ); } : null, - hasLabelText: severityController.text != + hasLabelText: frequencyController.text != '' ? true : false, showLabelText: true, - hintText: "Strength", + hintText: TranslationBase + .of(context) + .frequency, //TODO add translation fontSize: 13.5, readOnly: true, @@ -580,7 +492,7 @@ class _AddAllergiesState extends State { fontWeight: FontWeight.w600, maxLines: 2, minLines: 1, - controller: severityController, + controller: frequencyController, validator: (value) { if (value == null) return TranslationBase @@ -593,8 +505,11 @@ class _AddAllergiesState extends State { height: 5, ), if(isFormSubmitted && - _selectedMedicationStrengthSeverity == null) + _selectedMedicationFrequency == null) CustomValidationError(), + SizedBox( + height: 30, + ), AppButton( title: TranslationBase .of(context) @@ -604,15 +519,29 @@ class _AddAllergiesState extends State { setState(() { isFormSubmitted = true; }); - if (_selectedAllergy != null && - _selectedMedicationStrengthSeverity != - null) { - MySelectedAllergy mySelectedAllergy = new MySelectedAllergy( - remark: remarkController.text, - selectedAllergy: _selectedAllergy, - isChecked: true, - selectedAllergySeverity: _selectedMedicationStrengthSeverity,); - widget.addAllergiesFun(mySelectedAllergy); + if (_selectedMedication != null && + _selectedMedicationDose != + null && + _selectedMedicationStrength != null && + _selectedMedicationRoute != null && + _selectedMedicationFrequency != null) { + widget.medicationController.text = + widget.medicationController.text + + '${_selectedMedication + .description } (${TranslationBase + .of(context) + .doseTime} ) ${doseController + .text} (${TranslationBase + .of(context) + .strength}) ${strengthController + .text} (${TranslationBase + .of(context) + .route }) ${routeController + .text} (${TranslationBase + .of(context) + .frequency }) ${frequencyController + .text} \n \n'; + Navigator.of(context).pop(); } }, ), @@ -621,7 +550,7 @@ class _AddAllergiesState extends State { ), ), ), - )), + ),), ), ); } diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart b/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart index fb7b4dc6..3bc89a7f 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart @@ -209,7 +209,7 @@ class _UpdateSubjectivePageState extends State { complaintsController.text = helpers.parseHtmlString( model.patientChiefComplaintList[0].chiefComplaint); illnessController.text = model.patientChiefComplaintList[0].hopi; - medicationController.text = model.patientChiefComplaintList[0].currentMedication; + medicationController.text = model.patientChiefComplaintList[0].currentMedication + '\n \n'; } await getHistory(model); @@ -326,6 +326,10 @@ class _UpdateSubjectivePageState extends State { SizedBox( height: 10, ), + UpdateMedicationWidget(medicationController: medicationController,), + SizedBox( + height: 10, + ), Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), child: TextFields( @@ -340,7 +344,7 @@ class _UpdateSubjectivePageState extends State { // hintColor: Colors.black, fontWeight: FontWeight.w600, maxLines: 23, - minLines: 1, + minLines: 10, controller: medicationController, validator: (value) { if (value == null || value == "") @@ -354,10 +358,7 @@ class _UpdateSubjectivePageState extends State { SizedBox( height: 10, ), - UpdateMedicationWidget(myAllergiesList: widget.myAllergiesList,), - SizedBox( - height: 10, - ), + ]), ), isExpand: isChiefExpand,