From e85a32274a0ab6cdd00887ffed37a17ca5eacb42 Mon Sep 17 00:00:00 2001 From: RoaaGhali98 Date: Mon, 14 Mar 2022 09:32:46 +0300 Subject: [PATCH] Refactoring some issues in procedures screen --- lib/core/viewModel/procedure_View_model.dart | 29 +- .../procedures/add-procedure-page.dart | 13 +- .../base_add_procedure_tab_page.dart | 45 +-- .../entity_list_checkbox_search_widget.dart | 27 +- .../procedures/procedure_checkout_screen.dart | 276 +++++++++--------- lib/screens/procedures/procedure_screen.dart | 77 ++--- lib/screens/procedures/tab_widget.dart | 41 +++ lib/screens/procedures/update-procedure.dart | 11 - 8 files changed, 250 insertions(+), 269 deletions(-) create mode 100644 lib/screens/procedures/tab_widget.dart diff --git a/lib/core/viewModel/procedure_View_model.dart b/lib/core/viewModel/procedure_View_model.dart index 21ce023b..bec0e2de 100644 --- a/lib/core/viewModel/procedure_View_model.dart +++ b/lib/core/viewModel/procedure_View_model.dart @@ -24,7 +24,6 @@ import 'package:doctor_app_flutter/screens/procedures/ProcedureType.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/utils/utils.dart'; import 'package:flutter/cupertino.dart'; -import '../../widgets/shared/loader/gif_loader_dialog_utils.dart'; class ProcedureViewModel extends BaseViewModel { //TODO Hussam clean it @@ -68,8 +67,24 @@ class ProcedureViewModel extends BaseViewModel { List get procedureTemplateDetails => _procedureService.templateDetailsList; - List _patientLabOrdersListClinic = List(); - List _patientLabOrdersListHospital = List(); + + Future filterSearchResults(String query,List masterList, List items) async { + List dummySearchList = List(); + dummySearchList.addAll(masterList); + if (query.isNotEmpty) { + List dummyListData = List(); + dummySearchList.forEach((item) { + if (item.procedureName.toLowerCase().contains(query.toLowerCase())) { + dummyListData.add(item); + } + }); + items.clear(); + items.addAll(dummyListData); + } else { + items.clear(); + items.addAll(masterList); + } + } Future getProcedure({int mrn, String patientType, int appointmentNo}) async { hasError = false; @@ -433,4 +448,12 @@ class ProcedureViewModel extends BaseViewModel { Utils.showErrorToast(error); } } + + bool isEntityListSelected(cpe.EntityList masterKey, List entityList) { + Iterable history = entityList.where((element) => masterKey.procedureId == element.procedureId); + if (history.length > 0) { + return true; + } + return false; + } } diff --git a/lib/screens/procedures/add-procedure-page.dart b/lib/screens/procedures/add-procedure-page.dart index 26dde2e0..820082a1 100644 --- a/lib/screens/procedures/add-procedure-page.dart +++ b/lib/screens/procedures/add-procedure-page.dart @@ -167,7 +167,7 @@ class _AddProcedurePageState extends State { // widget.addSelectedHistories(); }, isEntityListSelected: (master) => - isEntityListSelected(master), + widget.model.isEntityListSelected(master,entityList), )), ], ), @@ -210,15 +210,4 @@ class _AddProcedurePageState extends State { ), ); } - - - ///TODO Elham* move it to view model - bool isEntityListSelected(EntityList masterKey) { - Iterable history = entityList - .where((element) => masterKey.procedureId == element.procedureId); - if (history.length > 0) { - return true; - } - return false; - } } diff --git a/lib/screens/procedures/base_add_procedure_tab_page.dart b/lib/screens/procedures/base_add_procedure_tab_page.dart index 5df0130a..6c481658 100644 --- a/lib/screens/procedures/base_add_procedure_tab_page.dart +++ b/lib/screens/procedures/base_add_procedure_tab_page.dart @@ -4,12 +4,10 @@ import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart'; import 'package:doctor_app_flutter/screens/prescription/add_prescription/add_prescription.dart'; +import 'package:doctor_app_flutter/screens/procedures/tab_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import '../../core/viewModel/project_view_model.dart'; -import '../../utils/tab_utils.dart'; import 'ProcedureType.dart'; import 'add-favourite-procedure.dart'; import 'add-procedure-page.dart'; @@ -94,7 +92,7 @@ class _BaseAddProcedureTabPageState extends State top: 0, left: 0, right: 0, bottom: 0), unselectedLabelColor: Colors.grey[800], tabs: [ - tabWidget( + TabWidget.tabWidget( screenSize, _activeTab == 0, @@ -102,7 +100,7 @@ class _BaseAddProcedureTabPageState extends State .getFavouriteTabName(context), isFirst: true,context: context ), - tabWidget( + TabWidget.tabWidget( screenSize, _activeTab == 1, procedureType.getAllLabelName(context), @@ -148,41 +146,4 @@ class _BaseAddProcedureTabPageState extends State ), ); } - - ///TODO Elham* move it to new file - - - Widget tabWidget( - Size screenSize, - bool isActive, - String title, { - int counter = -1, - bool isFirst = false, - bool isMiddle = false, - bool isLast = false, - context, - }) { - ProjectViewModel projectViewModel = Provider.of(context); - - return Center( - child: Container( - height: TabUtils.getTabHeight(context), - decoration: TabUtils.getBoxTabsBoxDecoration( - isActive: isActive, - isFirst: isFirst, - isMiddle: isMiddle, - isLast: isLast, - projectViewModel: projectViewModel), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - - TabUtils.getTabText(title: title, isActive: isActive), - if (counter != -1) - TabUtils.getTabCounter(isActive: isActive, counter: counter) - ], - ), - ), - ); - } } diff --git a/lib/screens/procedures/entity_list_checkbox_search_widget.dart b/lib/screens/procedures/entity_list_checkbox_search_widget.dart index c6a468fb..f7c6a377 100644 --- a/lib/screens/procedures/entity_list_checkbox_search_widget.dart +++ b/lib/screens/procedures/entity_list_checkbox_search_widget.dart @@ -84,7 +84,7 @@ class _EntityListCheckboxSearchWidgetState suffixIcon: EvaIcons.search, suffixIconColor: Color(0xff2B353E), onChanged: (value) { - filterSearchResults(value); + widget.model.filterSearchResults(value, widget.masterList, items); }, hasBorder: false, ), @@ -246,29 +246,4 @@ class _EntityListCheckboxSearchWidgetState ), ); } - - - ///TODO Elham* move it to view model - void filterSearchResults(String query) { - List dummySearchList = List(); - dummySearchList.addAll(widget.masterList); - if (query.isNotEmpty) { - List dummyListData = List(); - dummySearchList.forEach((item) { - if (item.procedureName.toLowerCase().contains(query.toLowerCase())) { - dummyListData.add(item); - } - }); - setState(() { - items.clear(); - items.addAll(dummyListData); - }); - return; - } else { - setState(() { - items.clear(); - items.addAll(widget.masterList); - }); - } - } } diff --git a/lib/screens/procedures/procedure_checkout_screen.dart b/lib/screens/procedures/procedure_checkout_screen.dart index 31a0a195..f2f57762 100644 --- a/lib/screens/procedures/procedure_checkout_screen.dart +++ b/lib/screens/procedures/procedure_checkout_screen.dart @@ -85,126 +85,125 @@ class _ProcedureCheckOutScreenState extends State { SizedBox( height: 30, ), - - ///TODO Elham* user view list builder - - ...List.generate( - widget.items.length, - (index) => Container( - margin: EdgeInsets.only(bottom: 15.0), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: - BorderRadius.all(Radius.circular(10.0))), - child: ExpansionTile( - initiallyExpanded: true, - title: Row( - children: [ - Icon( - Icons.check_box, - color: Color(0xffD02127), - size: 30.5, - ), - SizedBox( - width: 6.0, - ), - Expanded( - child: AppText( - widget.items[index].procedureName)), - ], - ), + ListView.builder( + scrollDirection: Axis.vertical, + itemCount: widget.items.length, + shrinkWrap: true, + itemBuilder: (BuildContext ctxt, int index) { + return Container( + margin: EdgeInsets.only(bottom: 15.0), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: + BorderRadius.all(Radius.circular(10.0))), + child: ExpansionTile( + initiallyExpanded: true, + title: Row( children: [ - Container( - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 12), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 11), - child: AppText( - TranslationBase.of(context) - .orderType, - fontWeight: FontWeight.w700, - color: Color(0xff2B353E), - ), - ), - ], - ), - Row( - children: [ - Radio( - activeColor: Color(0xFFD02127), - value: 0, - groupValue: - widget.items[index].selectedType, - onChanged: (value) { - widget.items[index].selectedType = - 0; - setState(() { - widget.items[index].type = - value.toString(); - }); - }, - ), - AppText( - 'routine', - color: Color(0xff575757), - fontWeight: FontWeight.w600, - ), - Radio( - activeColor: Color(0xFFD02127), - groupValue: - widget.items[index].selectedType, - value: 1, - onChanged: (value) { - widget.items[index].selectedType = - 1; - setState(() { - widget.items[index].type = - value.toString(); - }); - }, - ), - AppText( - TranslationBase.of(context).urgent, - color: Color(0xff575757), - fontWeight: FontWeight.w600, - ), - ], - ), - ], - ), - ), + Icon( + Icons.check_box, + color: Color(0xffD02127), + size: 30.5, ), SizedBox( - height: 2.0, + width: 6.0, ), - Padding( - padding: EdgeInsets.symmetric( - horizontal: 12, vertical: 15.0), - child: TextFields( - hintText: TranslationBase.of(context).remarks, - controller: remarksController, - onChanged: (value) { - widget.items[index].remarks = value; - }, - minLines: 3, - maxLines: 5, - borderWidth: 0.5, - borderColor: Colors.grey[500], + Expanded( + child: + AppText(widget.items[index].procedureName)), + ], + ), + children: [ + Container( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 11), + child: AppText( + TranslationBase.of(context).orderType, + fontWeight: FontWeight.w700, + color: Color(0xff2B353E), + ), + ), + ], + ), + Row( + children: [ + Radio( + activeColor: Color(0xFFD02127), + value: 0, + groupValue: + widget.items[index].selectedType, + onChanged: (value) { + widget.items[index].selectedType = 0; + setState(() { + widget.items[index].type = + value.toString(); + }); + }, + ), + AppText( + 'routine', + color: Color(0xff575757), + fontWeight: FontWeight.w600, + ), + Radio( + activeColor: Color(0xFFD02127), + groupValue: + widget.items[index].selectedType, + value: 1, + onChanged: (value) { + widget.items[index].selectedType = 1; + setState(() { + widget.items[index].type = + value.toString(); + }); + }, + ), + AppText( + TranslationBase.of(context).urgent, + color: Color(0xff575757), + fontWeight: FontWeight.w600, + ), + ], + ), + ], ), ), - SizedBox( - height: 19.0, + ), + SizedBox( + height: 2.0, + ), + Padding( + padding: EdgeInsets.symmetric( + horizontal: 12, vertical: 15.0), + child: TextFields( + hintText: TranslationBase.of(context).remarks, + controller: remarksController, + onChanged: (value) { + widget.items[index].remarks = value; + }, + minLines: 3, + maxLines: 5, + borderWidth: 0.5, + borderColor: Colors.grey[500], ), - //DividerWithSpacesAround(), - ], - ), - )), + ), + SizedBox( + height: 19.0, + ), + //DividerWithSpacesAround(), + ], + ), + ); + }), + SizedBox( height: 90, ), @@ -222,31 +221,7 @@ class _ProcedureCheckOutScreenState extends State { color: AppGlobal.appGreenColor, fontWeight: FontWeight.w700, onPressed: () async { - - ///TODO Elham* move it to function - - List entityList = List(); - widget.items.forEach((element) { - entityList.add( - EntityList( - procedureId: element.procedureID, - remarks: element.remarks, - categoryID: element.categoryID, - type: element.type, - ), - ); - }); - await locator().logEvent( - eventCategory: "Procedure Checkout Screen", - eventAction: "Add New Procedure", - ); - Navigator.pop(context); - await model.preparePostProcedure( - entityList: entityList, - patient: widget.patient, - remarks: remarksController.text); - Navigator.pop(context); - Navigator.pop(context); + addProcedures(model); }, ), ], @@ -255,4 +230,29 @@ class _ProcedureCheckOutScreenState extends State { ), ); } + + Future addProcedures(ProcedureViewModel model) async { + List entityList = List(); + widget.items.forEach((element) { + entityList.add( + EntityList( + procedureId: element.procedureID, + remarks: element.remarks, + categoryID: element.categoryID, + type: element.type, + ), + ); + }); + await locator().logEvent( + eventCategory: "Procedure Checkout Screen", + eventAction: "Add New Procedure", + ); + Navigator.pop(context); + await model.preparePostProcedure( + entityList: entityList, + patient: widget.patient, + remarks: remarksController.text); + Navigator.pop(context); + Navigator.pop(context); + } } diff --git a/lib/screens/procedures/procedure_screen.dart b/lib/screens/procedures/procedure_screen.dart index 1a6de092..c79ef942 100644 --- a/lib/screens/procedures/procedure_screen.dart +++ b/lib/screens/procedures/procedure_screen.dart @@ -127,43 +127,46 @@ class ProcedureScreen extends StatelessWidget { ), ), if (model.procedureList.isNotEmpty) - ///TODO Elham* use list view builder - ...List.generate( - model.procedureList[0].rowcount, - (index) => ProcedureCard( - categoryID: model.procedureList[0].entityList[index].categoryID, - entityList: model.procedureList[0].entityList[index], - onTap: () { - if (model.procedureList[0].entityList[index].categoryID == - 2 || - model.procedureList[0].entityList[index].categoryID == 4) - updateProcedureForm(context, - model: model, - patient: patient, - remarks: model - .procedureList[0].entityList[index].remarks, - orderType: model - .procedureList[0].entityList[index].orderType - .toString(), - orderNo: model - .procedureList[0].entityList[index].orderNo, - procedureName: model.procedureList[0] - .entityList[index].procedureName, - categoreId: model - .procedureList[0].entityList[index].categoryID - .toString(), - procedureId: model.procedureList[0] - .entityList[index].procedureId, - limetNo: model.procedureList[0].entityList[index] - .lineItemNo); - // } else - // Helpers.showErrorToast( - // 'You Cant Update This Procedure'); - }, - patient: patient, - doctorID: model?.doctorProfile?.doctorID, - ), - ), + ListView.builder( + scrollDirection: Axis.vertical, + itemCount: model.procedureList[0].rowcount, + shrinkWrap: true, + itemBuilder: (BuildContext ctxt, int index) { + return ProcedureCard( + categoryID: model + .procedureList[0].entityList[index].categoryID, + entityList: model.procedureList[0].entityList[index], + onTap: () { + if (model.procedureList[0].entityList[index].categoryID == + 2 || + model.procedureList[0].entityList[index].categoryID == 4) + updateProcedureForm(context, + model: model, + patient: patient, + remarks: model.procedureList[0] + .entityList[index].remarks, + orderType: model.procedureList[0] + .entityList[index].orderType + .toString(), + orderNo: model.procedureList[0] + .entityList[index].orderNo, + procedureName: model.procedureList[0] + .entityList[index].procedureName, + categoreId: model.procedureList[0] + .entityList[index].categoryID + .toString(), + procedureId: model.procedureList[0] + .entityList[index].procedureId, + limetNo: model.procedureList[0] + .entityList[index].lineItemNo); + // } else + // Helpers.showErrorToast( + // 'You Cant Update This Procedure'); + }, + patient: patient, + doctorID: model?.doctorProfile?.doctorID, + ); + }), if (model.state == ViewState.ErrorLocal || (model.procedureList.isNotEmpty && model.procedureList[0].entityList.isEmpty)) diff --git a/lib/screens/procedures/tab_widget.dart b/lib/screens/procedures/tab_widget.dart new file mode 100644 index 00000000..9683c1b4 --- /dev/null +++ b/lib/screens/procedures/tab_widget.dart @@ -0,0 +1,41 @@ +import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; +import 'package:doctor_app_flutter/utils/tab_utils.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + + +class TabWidget { + static Widget tabWidget( + Size screenSize, + bool isActive, + String title, + { + int counter = -1, + bool isFirst = false, + bool isMiddle = false, + bool isLast = false, + context, + }) { + ProjectViewModel projectViewModel = Provider.of(context); + return Center( + child: Container( + height: TabUtils.getTabHeight(context), + decoration: TabUtils.getBoxTabsBoxDecoration( + isActive: isActive, + isFirst: isFirst, + isMiddle: isMiddle, + isLast: isLast, + projectViewModel: projectViewModel), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + + TabUtils.getTabText(title: title, isActive: isActive), + if (counter != -1) + TabUtils.getTabCounter(isActive: isActive, counter: counter) + ], + ), + ), + ); + } +} diff --git a/lib/screens/procedures/update-procedure.dart b/lib/screens/procedures/update-procedure.dart index 1ae3d3e5..d1ca6268 100644 --- a/lib/screens/procedures/update-procedure.dart +++ b/lib/screens/procedures/update-procedure.dart @@ -265,15 +265,4 @@ class _UpdateProcedureWidgetState extends State { model.getProcedure(mrn: patient.patientMRN); } } - - - ///TODO Elham* move it to view model - bool isEntityListSelected(EntityList masterKey) { - Iterable history = entityList - .where((element) => masterKey.procedureId == element.procedureId); - if (history.length > 0) { - return true; - } - return false; - } }