From 90a16676db8fe07d6bc14f51a8de3ca1f47e3342 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 11 Jan 2021 13:54:57 +0200 Subject: [PATCH] fix issue related to SOAP --- .../soap_update/custom_validation_error.dart | 33 +++++ .../subjective/update_allergies_widget.dart | 42 ++++-- .../subjective/update_history_widget.dart | 121 +++++++++-------- .../soap_update/update_assessment_page.dart | 24 +++- .../soap_update/update_objective_page.dart | 2 +- .../profile/soap_update/update_plan_page.dart | 7 +- .../master_key_checkbox_search_widget.dart | 125 +++++++++--------- 7 files changed, 215 insertions(+), 139 deletions(-) create mode 100644 lib/widgets/patients/profile/soap_update/custom_validation_error.dart diff --git a/lib/widgets/patients/profile/soap_update/custom_validation_error.dart b/lib/widgets/patients/profile/soap_update/custom_validation_error.dart new file mode 100644 index 00000000..a05d52a2 --- /dev/null +++ b/lib/widgets/patients/profile/soap_update/custom_validation_error.dart @@ -0,0 +1,33 @@ + +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:flutter/material.dart'; + +// ignore: must_be_immutable +class CustomValidationError extends StatelessWidget { + String error; + CustomValidationError({ + Key key, this.error, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + if(error == null ) + error = TranslationBase + .of(context) + .emptyMessage; + return Column( + children: [ + SizedBox( + height: 2, + ), + Container( + margin: EdgeInsets.symmetric(horizontal: 3), + child: AppText(error, color: Theme + .of(context) + .errorColor, fontSize: 14,), + ), + ], + ); + } +} \ No newline at end of file diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart index 6de9e031..38a0896b 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart @@ -19,6 +19,8 @@ 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 UpdateAllergiesWidget extends StatefulWidget { final List myAllergiesList; @@ -226,10 +228,11 @@ class _AddAllergiesState extends State { MasterKeyModel _selectedAllergy; TextEditingController remarkController = TextEditingController(); GlobalKey key = new GlobalKey>(); + bool isFormSubmitted = false; - - InputDecoration textFieldSelectorDecoration(String hintText, - String selectedText, bool isDropDown,{IconData icon}) { + InputDecoration textFieldSelectorDecoration( + String hintText, String selectedText, bool isDropDown, + {IconData icon}) { return InputDecoration( focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), @@ -328,18 +331,24 @@ class _AddAllergiesState extends State { input.toLowerCase()) || suggestion.nameEn.toLowerCase() .startsWith(input.toLowerCase()), - ):TextField( + ) : TextField( decoration: textFieldSelectorDecoration( TranslationBase .of(context) .selectAllergy, _selectedAllergy != null - ? projectViewModel.isArabic?_selectedAllergy.nameAr: _selectedAllergy.nameEn - : null, true, icon: EvaIcons.search), + ? projectViewModel.isArabic + ? _selectedAllergy.nameAr + : _selectedAllergy.nameEn + : null, + true, + icon: EvaIcons.search), enabled: false, ), ), ), + if(isFormSubmitted && _selectedAllergy == null) + CustomValidationError(), SizedBox( height: 10, ), @@ -382,6 +391,8 @@ class _AddAllergiesState extends State { ), ), ), + if(isFormSubmitted && _selectedAllergySeverity == null) + CustomValidationError(), SizedBox( height: 10, ), @@ -410,12 +421,18 @@ class _AddAllergiesState extends State { AppButton( title: TranslationBase.of(context).add.toUpperCase(), onPressed: () { - MySelectedAllergy mySelectedAllergy = new MySelectedAllergy( - remark: remarkController.text, - selectedAllergy: _selectedAllergy, - isChecked: true, - selectedAllergySeverity: _selectedAllergySeverity,); - widget.addAllergiesFun(mySelectedAllergy); + setState(() { + isFormSubmitted = true; + }); + if(_selectedAllergy !=null && _selectedAllergySeverity !=null) { + MySelectedAllergy mySelectedAllergy = new MySelectedAllergy( + remark: remarkController.text, + selectedAllergy: _selectedAllergy, + isChecked: true, + selectedAllergySeverity: _selectedAllergySeverity,); + widget.addAllergiesFun(mySelectedAllergy); + } + }, ), ] @@ -433,3 +450,4 @@ class _AddAllergiesState extends State { + diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart index 9a7cba01..28f9f466 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart @@ -10,6 +10,7 @@ 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_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; @@ -271,6 +272,9 @@ class _AddHistoryDialogState extends State { onModelReady: (model) async { if (model.historyFamilyList.length == 0) { await model.getMasterLookup(MasterKeysService.HistoryFamily); + setState(() { + + }); } }, builder: (_, model, w) => AppScaffold( @@ -313,62 +317,71 @@ class _AddHistoryDialogState extends State { }, scrollDirection: Axis.horizontal, children: [ - MasterKeyCheckboxSearchWidget( - model: model, - masterList: model.historyFamilyList, - removeHistory: (history){ - setState(() { - widget.removeHistory(history); - }); - }, - addHistory: (history){ - setState(() { - createAndAddHistory( - history); - }); - }, - addSelectedHistories: (){ - widget.addSelectedHistories(); - }, - isServiceSelected: (master) =>isServiceSelected(master), + NetworkBaseView( + baseViewModel: model, + child: MasterKeyCheckboxSearchWidget( + model: model, + masterList: model.historyFamilyList, + removeHistory: (history){ + setState(() { + widget.removeHistory(history); + }); + }, + addHistory: (history){ + setState(() { + createAndAddHistory( + history); + }); + }, + addSelectedHistories: (){ + widget.addSelectedHistories(); + }, + isServiceSelected: (master) =>isServiceSelected(master), + ), ), - MasterKeyCheckboxSearchWidget( - model: model, - masterList: model.mergeHistorySurgicalWithHistorySportList, - removeHistory: (history){ - setState(() { - widget.removeHistory(history); - }); - }, - addHistory: (history){ - setState(() { - createAndAddHistory( - history); - }); - }, - addSelectedHistories: (){ - widget.addSelectedHistories(); - }, - isServiceSelected: (master) =>isServiceSelected(master), + NetworkBaseView( + baseViewModel: model, + child: MasterKeyCheckboxSearchWidget( + model: model, + masterList: model.mergeHistorySurgicalWithHistorySportList, + removeHistory: (history){ + setState(() { + widget.removeHistory(history); + }); + }, + addHistory: (history){ + setState(() { + createAndAddHistory( + history); + }); + }, + addSelectedHistories: (){ + widget.addSelectedHistories(); + }, + isServiceSelected: (master) =>isServiceSelected(master), + ), ), - MasterKeyCheckboxSearchWidget( - model: model, - masterList: model.historyMedicalList, - removeHistory: (history){ - setState(() { - widget.removeHistory(history); - }); - }, - addHistory: (history){ - setState(() { - createAndAddHistory( - history); - }); - }, - addSelectedHistories: (){ - widget.addSelectedHistories(); - }, - isServiceSelected: (master) =>isServiceSelected(master), + NetworkBaseView( + baseViewModel: model, + child: MasterKeyCheckboxSearchWidget( + model: model, + masterList: model.historyMedicalList, + removeHistory: (history){ + setState(() { + widget.removeHistory(history); + }); + }, + addHistory: (history){ + setState(() { + createAndAddHistory( + history); + }); + }, + addSelectedHistories: (){ + widget.addSelectedHistories(); + }, + isServiceSelected: (master) =>isServiceSelected(master), + ), ), ], ), diff --git a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart index 0cec0609..93d56af2 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -23,6 +23,8 @@ import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'custom_validation_error.dart'; + class UpdateAssessmentPage extends StatefulWidget { final Function changePageViewIndex; List mySelectedAssessmentList; @@ -399,6 +401,7 @@ class _UpdateAssessmentPageState extends State { addSelectedAssessment: (MySelectedAssessment mySelectedAssessment, bool isUpdate) async { setState(() { + widget.mySelectedAssessmentList.add(mySelectedAssessment); }); }); @@ -413,7 +416,6 @@ class AddAssessmentDetails extends StatefulWidget { final Function(MySelectedAssessment mySelectedAssessment, bool isUpdate) addSelectedAssessment; final PatiantInformtion patientInfo; final bool isUpdate; - AddAssessmentDetails( {Key key, this.mySelectedAssessment, this.addSelectedAssessment, this.patientInfo, this.isUpdate = false, this.mySelectedAssessmentList}); @@ -426,6 +428,7 @@ class _AddAssessmentDetailsState extends State { TextEditingController remarkController = TextEditingController(); TextEditingController appointmentIdController = TextEditingController(); GlobalKey key = new GlobalKey>(); + bool isFormSubmitted = false; @override Widget build(BuildContext context) { @@ -549,6 +552,9 @@ class _AddAssessmentDetailsState extends State { ), ), ), + if(isFormSubmitted && widget.mySelectedAssessment + .selectedICD == null) + CustomValidationError(), SizedBox( height: 10, ), @@ -595,6 +601,9 @@ class _AddAssessmentDetailsState extends State { ), ), ), + if(isFormSubmitted && widget.mySelectedAssessment + .selectedDiagnosisCondition == null) + CustomValidationError(), SizedBox( height: 10, ), @@ -641,6 +650,9 @@ class _AddAssessmentDetailsState extends State { ), ), ), + if(isFormSubmitted && widget.mySelectedAssessment + .selectedDiagnosisType == null) + CustomValidationError(), SizedBox( height: 10, ), @@ -671,6 +683,9 @@ class _AddAssessmentDetailsState extends State { title: (widget.isUpdate?TranslationBase.of(context).update:TranslationBase.of(context).add).toUpperCase(), loading: model.state == ViewState.BusyLocal, onPressed: () async { + setState(() { + isFormSubmitted = true; + }); widget.mySelectedAssessment.remark = remarkController.text; widget.mySelectedAssessment @@ -692,10 +707,6 @@ class _AddAssessmentDetailsState extends State { model: model, mySelectedAssessment: widget .mySelectedAssessment); - } else { - helpers.showErrorToast(TranslationBase - .of(context) - .requiredMsg); } }, ), @@ -752,7 +763,8 @@ class _AddAssessmentDetailsState extends State { mySelectedAssessment.icdCode10ID = mySelectedAssessment.selectedICD.code; if (!isUpdate) { - widget.mySelectedAssessmentList.add(mySelectedAssessment); + // widget.mySelectedAssessmentList.add(mySelectedAssessment); + widget.addSelectedAssessment(mySelectedAssessment,isUpdate); } Navigator.of(context).pop(); } diff --git a/lib/widgets/patients/profile/soap_update/update_objective_page.dart b/lib/widgets/patients/profile/soap_update/update_objective_page.dart index 550a36ca..9bd38666 100644 --- a/lib/widgets/patients/profile/soap_update/update_objective_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_objective_page.dart @@ -315,7 +315,7 @@ class _UpdateObjectivePageState extends State { fontWeight: FontWeight.w600, maxLines: 25, minLines: 4, - controller: remarksController, + // controller: remarksController, validator: (value) { if (value == null) return TranslationBase.of(context) diff --git a/lib/widgets/patients/profile/soap_update/update_plan_page.dart b/lib/widgets/patients/profile/soap_update/update_plan_page.dart index b8ceea79..a3c2cdd2 100644 --- a/lib/widgets/patients/profile/soap_update/update_plan_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_plan_page.dart @@ -113,7 +113,7 @@ class _UpdatePlanPageState extends State { ), Column( children: [ - if(model.patientProgressNoteList.isEmpty) + if(model.patientProgressNoteList.isEmpty || progressNoteController.text !='') Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), @@ -140,7 +140,7 @@ class _UpdatePlanPageState extends State { SizedBox( height: 20, ), - if (progressNoteController.text.isNotEmpty) + if (progressNoteController.text !='') Container( margin: EdgeInsets.only(left: 5, right: 5, top: 15), @@ -350,6 +350,9 @@ class _UpdatePlanPageState extends State { AppButton( title: "Add".toUpperCase(), onPressed: () { + setState(() { + print(progressNoteController.text); + }); Navigator.of(context).pop(); }, ), diff --git a/lib/widgets/shared/master_key_checkbox_search_widget.dart b/lib/widgets/shared/master_key_checkbox_search_widget.dart index aafb8adc..dd9e2f3d 100644 --- a/lib/widgets/shared/master_key_checkbox_search_widget.dart +++ b/lib/widgets/shared/master_key_checkbox_search_widget.dart @@ -53,71 +53,68 @@ class _MasterKeyCheckboxSearchWidgetState extends State