Merge branch 'master' into haroon_dev
						commit
						3d64ddf78b
					
				| @ -0,0 +1,32 @@ | |||||||
|  | class PatientLabSpecialResult { | ||||||
|  |   String? invoiceNo; | ||||||
|  |   String? moduleID; | ||||||
|  |   String? resultData; | ||||||
|  |   String? resultDataHTML; | ||||||
|  |   dynamic resultDataTxt; | ||||||
|  | 
 | ||||||
|  |   PatientLabSpecialResult( | ||||||
|  |       {this.invoiceNo, | ||||||
|  |         this.moduleID, | ||||||
|  |         this.resultData, | ||||||
|  |         this.resultDataHTML, | ||||||
|  |         this.resultDataTxt}); | ||||||
|  | 
 | ||||||
|  |   PatientLabSpecialResult.fromJson(Map<String, dynamic> json) { | ||||||
|  |     invoiceNo = json['InvoiceNo']; | ||||||
|  |     moduleID = json['ModuleID']; | ||||||
|  |     resultData = json['ResultData']; | ||||||
|  |     resultDataHTML = json['ResultDataHTML']; | ||||||
|  |     resultDataTxt = json['ResultDataTxt']; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Map<String, dynamic> toJson() { | ||||||
|  |     final Map<String, dynamic> data = new Map<String, dynamic>(); | ||||||
|  |     data['InvoiceNo'] = this.invoiceNo; | ||||||
|  |     data['ModuleID'] = this.moduleID; | ||||||
|  |     data['ResultData'] = this.resultData; | ||||||
|  |     data['ResultDataHTML'] = this.resultDataHTML; | ||||||
|  |     data['ResultDataTxt'] = this.resultDataTxt; | ||||||
|  |     return data; | ||||||
|  |   } | ||||||
|  | } | ||||||
											
												
													File diff suppressed because one or more lines are too long
												
											
										
									
								| @ -0,0 +1,69 @@ | |||||||
|  | import 'package:easy_localization/easy_localization.dart' | ||||||
|  |     show tr, StringTranslateExtension; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/LabResultList.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/lab_order_specialResult.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/theme/colors.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; | ||||||
|  | import 'package:provider/provider.dart'; | ||||||
|  | 
 | ||||||
|  | class LabResultByHospitals extends StatelessWidget { | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return CollapsingListView( | ||||||
|  |         title: LocaleKeys.labResults.tr(), | ||||||
|  |         child: SingleChildScrollView( | ||||||
|  |           child: Column( | ||||||
|  |             spacing: 8.h, | ||||||
|  |             crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |             children: [ | ||||||
|  |               Selector<LabViewModel, bool>( | ||||||
|  |                 selector: (_, model) => model.isLabResultByHospitalLoading, | ||||||
|  |                 builder: (_, isLoading, __) { | ||||||
|  |                   if (isLoading) { | ||||||
|  |                     return Column( | ||||||
|  |                       children: [ | ||||||
|  |                         LabResultItemView( | ||||||
|  |                           onTap: () {}, | ||||||
|  |                           labOrder: null, | ||||||
|  |                           index: 0, | ||||||
|  |                           isLoading: true, | ||||||
|  |                         ), | ||||||
|  |                         LabResultItemView( | ||||||
|  |                           onTap: () {}, | ||||||
|  |                           labOrder: null, | ||||||
|  |                           index: 0, | ||||||
|  |                           isLoading: true, | ||||||
|  |                         ), | ||||||
|  |                         LabResultItemView( | ||||||
|  |                           onTap: () {}, | ||||||
|  |                           labOrder: null, | ||||||
|  |                           index: 0, | ||||||
|  |                           isLoading: true, | ||||||
|  |                         ), | ||||||
|  |                         LabResultItemView( | ||||||
|  |                           onTap: () {}, | ||||||
|  |                           labOrder: null, | ||||||
|  |                           index: 0, | ||||||
|  |                           isLoading: true, | ||||||
|  |                         ), | ||||||
|  |                       ], | ||||||
|  |                     ); | ||||||
|  |                   } else { | ||||||
|  |                     return LabResultList(); | ||||||
|  |                   } | ||||||
|  |                 }, | ||||||
|  |               ), | ||||||
|  |               LabOrderSpecialResult() | ||||||
|  |             ], | ||||||
|  |           ).paddingAll(24.h), | ||||||
|  |         )); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,40 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/core/utils/utils.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/features/lab/models/resp_models/lab_result.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/lab_order_result_item.dart'; | ||||||
|  | import 'package:provider/provider.dart' show Selector, Provider; | ||||||
|  | 
 | ||||||
|  | class LabResultList extends StatelessWidget { | ||||||
|  |   late LabViewModel model; | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     model = Provider.of<LabViewModel>(context); | ||||||
|  |     return Selector<LabViewModel, List<LabResult>>( | ||||||
|  |       selector: (_, model) => model.mainLabResultsByHospitals, | ||||||
|  |       builder: (__, list, ___) { | ||||||
|  |         if (list.isEmpty) { | ||||||
|  |           return Utils.getNoDataWidget(context, | ||||||
|  |               noDataText: "You don't have any lab results yet." | ||||||
|  |                   .needTranslation); | ||||||
|  |         } else { | ||||||
|  |           return ListView.builder( | ||||||
|  |               physics: NeverScrollableScrollPhysics(), | ||||||
|  |               padding: EdgeInsets.zero, | ||||||
|  |               shrinkWrap: true,itemCount: list.length,itemBuilder: (____, index) { | ||||||
|  |             var labItem = list[index]; | ||||||
|  |             return LabOrderResultItem(onTap: () { | ||||||
|  |               model.getPatientLabResult(model.currentlySelectedPatientOrder!, labItem.description??""); | ||||||
|  |             }, | ||||||
|  |                 tests: labItem, | ||||||
|  |                 index: index, | ||||||
|  |                 iconColor: model.getColor(labItem.calculatedResultFlag ?? "N"), | ||||||
|  |                 severityText: model.getSeverityText(labItem.calculatedResultFlag ?? "N")); | ||||||
|  |           }); | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,96 @@ | |||||||
|  | import 'package:easy_localization/easy_localization.dart'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/core/app_assets.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/core/app_export.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/core/enums.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/core/utils/date_util.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/core/utils/utils.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/features/lab/models/resp_models/lab_result.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/theme/colors.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart'; | ||||||
|  | 
 | ||||||
|  | class LabOrderResultItem extends StatelessWidget { | ||||||
|  |   final VoidCallback onTap; | ||||||
|  |   final int index; | ||||||
|  |   final LabResult? tests; | ||||||
|  |   final String severityText; | ||||||
|  |   final bool isLoading; | ||||||
|  |   final bool isExpanded; | ||||||
|  |   final Color iconColor; | ||||||
|  | 
 | ||||||
|  |   const LabOrderResultItem({super.key, required this.onTap, this.tests, required this.index, this.isLoading = false, this.isExpanded = false,required this.iconColor, required this.severityText}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   build(BuildContext context) { | ||||||
|  |     return AnimatedContainer( | ||||||
|  |         duration: Duration(milliseconds: 300), | ||||||
|  |         curve: Curves.easeInOut, | ||||||
|  |         margin: EdgeInsets.symmetric(vertical: 8.h), | ||||||
|  |         decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 20.h, hasShadow: true), | ||||||
|  |         child: Container( | ||||||
|  |           key: ValueKey<int>(index), | ||||||
|  |           padding: EdgeInsets.symmetric(horizontal: 16.h, vertical: 16.h), | ||||||
|  |           child: Column( | ||||||
|  |             crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |             children: [ | ||||||
|  |               // ...labOrder!.testDetails!.map((detail) { | ||||||
|  |               Padding( | ||||||
|  |                 padding: EdgeInsets.only(bottom: 8.h), | ||||||
|  |                 child: '${tests!.description}'.toText14(weight: FontWeight.w500), | ||||||
|  |               ), | ||||||
|  |               '${tests!.packageShortDescription}'.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), | ||||||
|  |               // | ||||||
|  |               SizedBox(height: 24.h), | ||||||
|  |               Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Column( | ||||||
|  |                     spacing: 6.h, | ||||||
|  |                     crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |                     children: [ | ||||||
|  | 
 | ||||||
|  |                       Text(severityText.tr(), | ||||||
|  |                       style: TextStyle( | ||||||
|  |                         fontFamily: 'Poppins', | ||||||
|  |                         fontSize: 10.fSize, | ||||||
|  |                         fontWeight: FontWeight.w500, | ||||||
|  |                         color: AppColors.greyTextColor | ||||||
|  |                       )), | ||||||
|  |                       Utils.buildSvgWithAssets( | ||||||
|  |                         icon: AppAssets.lab_result_indicator, | ||||||
|  |                         width: 21, | ||||||
|  |                         height: 23, | ||||||
|  |                         iconColor: iconColor | ||||||
|  |                       ), | ||||||
|  |                     ], | ||||||
|  |                   ), | ||||||
|  |                   CustomButton( | ||||||
|  |                     icon: AppAssets.view_report_icon, | ||||||
|  |                     iconColor: AppColors.primaryRedColor, | ||||||
|  |                     iconSize: 16.h, | ||||||
|  |                     text: LocaleKeys.viewReport.tr(context: context), | ||||||
|  |                     onPressed: () { | ||||||
|  |                         onTap(); | ||||||
|  |                     }, | ||||||
|  |                     backgroundColor: AppColors.secondaryLightRedColor, | ||||||
|  |                     borderColor: AppColors.secondaryLightRedColor, | ||||||
|  |                     textColor: AppColors.primaryRedColor, | ||||||
|  |                     fontSize: 14, | ||||||
|  |                     fontWeight: FontWeight.bold, | ||||||
|  |                     borderRadius: 12, | ||||||
|  |                     padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | ||||||
|  |                     height: 40.h, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ], | ||||||
|  |           ), | ||||||
|  |         )); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,120 @@ | |||||||
|  | import 'package:easy_localization/easy_localization.dart'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; | ||||||
|  | import 'package:hmg_patient_app_new/theme/colors.dart'; | ||||||
|  | import 'package:provider/provider.dart'; | ||||||
|  | 
 | ||||||
|  | class LabOrderSpecialResult extends StatelessWidget { | ||||||
|  |   const LabOrderSpecialResult({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Selector<LabViewModel, bool>( | ||||||
|  |         selector: (_, model) => model.isSpecialResultsLoading, | ||||||
|  |         builder: (_, isLoading, __) { | ||||||
|  |           return Selector<LabViewModel, String>( | ||||||
|  |               selector: (_, model) => model.labSpecialResult, | ||||||
|  |               builder: (_, data, __) { | ||||||
|  |                 if(isLoading){ | ||||||
|  |                   return Container( | ||||||
|  |                       margin: EdgeInsets.symmetric(vertical: 8.h), | ||||||
|  |                       padding: EdgeInsets.symmetric( | ||||||
|  |                           horizontal: 16.h, vertical: 16.h), | ||||||
|  |                       width: MediaQuery.sizeOf(context).width - 24, | ||||||
|  |                       decoration: RoundedRectangleBorder() | ||||||
|  |                           .toSmoothCornerDecoration( | ||||||
|  |                           color: AppColors.whiteColor, | ||||||
|  |                           borderRadius: 20.h, | ||||||
|  |                           hasShadow: true), | ||||||
|  |                       child:Column( | ||||||
|  |                         crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |                         spacing: 12.h, | ||||||
|  |                         children: [ | ||||||
|  |                           "loading".toText14().toShimmer2(isShow: isLoading), | ||||||
|  |                           "loading".toText14().toShimmer2(isShow: isLoading), | ||||||
|  |                         ], | ||||||
|  |                       ) | ||||||
|  |                   ); | ||||||
|  |                 } | ||||||
|  |                 if(data.isNotEmpty ) { | ||||||
|  |                   return AnimatedContainer( | ||||||
|  |                       duration: Duration(milliseconds: 300), | ||||||
|  |                       curve: Curves.easeInOut, | ||||||
|  |                       margin: EdgeInsets.symmetric(vertical: 8.h), | ||||||
|  |                       decoration: RoundedRectangleBorder() | ||||||
|  |                           .toSmoothCornerDecoration( | ||||||
|  |                               color: AppColors.whiteColor, | ||||||
|  |                               borderRadius: 20.h, | ||||||
|  |                               hasShadow: true), | ||||||
|  |                       child: Container( | ||||||
|  |                         padding: EdgeInsets.symmetric( | ||||||
|  |                             horizontal: 16.h, vertical: 16.h), | ||||||
|  |                         width: MediaQuery.sizeOf(context).width - 24, | ||||||
|  |                         child: Column( | ||||||
|  |                           spacing: 8.h, | ||||||
|  |                           crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |                           children: [ | ||||||
|  |                             // ...labOrder!.testDetails!.map((detail) { | ||||||
|  |                             LocaleKeys.specialResult | ||||||
|  |                                 .tr() | ||||||
|  |                                 .toText14(weight: FontWeight.w500) | ||||||
|  |                                 .toShimmer2(isShow: isLoading), | ||||||
|  | 
 | ||||||
|  |                             data.isEmpty | ||||||
|  |                                 ? LocaleKeys.noSpecialResult | ||||||
|  |                                     .tr() | ||||||
|  |                                     .toText12( | ||||||
|  |                                         fontWeight: FontWeight.w500, | ||||||
|  |                                         color: AppColors.textColorLight) | ||||||
|  |                                     .toShimmer2(isShow: isLoading) | ||||||
|  |                                 : HtmlWidget(data).toShimmer2(isShow: isLoading) | ||||||
|  | 
 | ||||||
|  |                             // | ||||||
|  |                           ], | ||||||
|  |                         ), | ||||||
|  |                       )); | ||||||
|  |                 } return SizedBox.shrink(); | ||||||
|  |               }); | ||||||
|  | 
 | ||||||
|  |         }); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*Text( | ||||||
|  |                 "Special Results", | ||||||
|  |                 style: TextStyle( | ||||||
|  |                     fontSize: 18.fSize, | ||||||
|  |                     fontWeight: FontWeight.w600, | ||||||
|  |                     color: AppColors.blackColor), | ||||||
|  |               ), | ||||||
|  |               Container( | ||||||
|  |                   decoration: RoundedRectangleBorder().toSmoothCornerDecoration( | ||||||
|  |                     color: AppColors.whiteColor, | ||||||
|  |                     borderRadius: 20.h, | ||||||
|  |                   hasShadow: true | ||||||
|  |                   ), | ||||||
|  |                   padding: EdgeInsets.all(16.h), | ||||||
|  |                   width: MediaQuery.sizeOf(context).width-24, | ||||||
|  |                   child: Selector<LabViewModel, bool>( | ||||||
|  |                       selector: (_, model) => | ||||||
|  |                           model.isLabResultByHospitalLoading, | ||||||
|  |                       builder: (_, isLoading, __) { | ||||||
|  |                         return Selector<LabViewModel, String>( | ||||||
|  |                             selector: (_, model) => model.labSpecialResult, | ||||||
|  |                             builder: (_, data, __) { | ||||||
|  |                               return (data.isEmpty) | ||||||
|  |                                   ? Text("No result available".needTranslation, | ||||||
|  |                                           style: TextStyle( | ||||||
|  |                                               fontSize: 12.fSize, | ||||||
|  |                                               fontWeight: FontWeight.w500, | ||||||
|  |                                               color: AppColors.textColorLight)) | ||||||
|  |                                       .toShimmer2(isShow: isLoading) | ||||||
|  |                                   : HtmlWidget(data) | ||||||
|  |                                       .toShimmer2(isShow: isLoading); | ||||||
|  |                             }); | ||||||
|  |                       }))*/ | ||||||
					Loading…
					
					
				
		Reference in New Issue