import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/core/viewModel/medical_file_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/utils/date-utils.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/app_bar/patient-profile-app-bar.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/expandable-widget-header-body.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:provider/provider.dart'; import '../../widgets/shared/errors/error_message.dart'; class MedicalFileDetails extends StatefulWidget { String? age; String? firstName; String? lastName; String? gender; int? encounterNumber; int? pp; PatiantInformtion? patient; String? clinicName; String? episode; String? doctorName; String? vistDate; String? doctorImage; MedicalFileDetails( {this.age, this.firstName, this.lastName, this.gender, this.encounterNumber, this.pp, this.patient, this.doctorName, this.vistDate, this.clinicName, this.episode, this.doctorImage}); @override _MedicalFileDetailsState createState() => _MedicalFileDetailsState( firstName: firstName!, age: age!, lastName: lastName!, gender: gender!, encounterNumber: encounterNumber!, pp: pp!, patient: patient!, clinicName: clinicName!, doctorName: doctorName!, episode: episode!, vistDate: vistDate!, doctorImage: doctorImage!, ); } class _MedicalFileDetailsState extends State { int? encounterNumber; String? age; String? firstName; String? lastName; String? gender; int? pp; PatiantInformtion? patient; String? clinicName; String? episode; String? doctorName; String? vistDate; String? doctorImage; _MedicalFileDetailsState( {this.age, this.firstName, this.lastName, this.gender, this.encounterNumber, this.pp, this.patient, this.doctorName, this.vistDate, this.clinicName, this.episode, this.doctorImage}); bool isPhysicalExam = true; bool isProcedureExpand = true; bool isHistoryExpand = true; bool isAssessmentExpand = true; @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return BaseView( onModelReady: (model) async { if (model.medicalFileList.length == 0) { model.getMedicalFile(mrn: pp!); } }, builder: (BuildContext context, MedicalFileViewModel model, Widget? child) => AppScaffold( appBar: PatientProfileAppBar( patient!, doctorName: doctorName!, profileUrl: doctorImage!, clinic: clinicName!, isPrescriptions: true, isMedicalFile: true, episode: episode!, visitDate: '${AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat( vistDate!, ), isArabic: projectViewModel.isArabic)}', isAppointmentHeader: true, ), isShowAppBar: true, appBarTitle: TranslationBase.of(context).medicalReport.toUpperCase(), body: NetworkBaseView( baseViewModel: model, child: SingleChildScrollView( child: Center( child: Container( child: Column( children: [ model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0 ? Padding( padding: EdgeInsets.all(10.0), child: Container( child: Column( children: [ SizedBox(height: 25.0), if (model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0) Container( width: double.infinity, margin: EdgeInsets.only(top: 10, left: 10, right: 10), padding: EdgeInsets.all(8.0), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(10.0), ), border: Border.all(color: Colors.grey[200]!, width: 0.5), ), child: Padding( padding: const EdgeInsets.all(15.0), child: HeaderBodyExpandableNotifier( headerWidget: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ AppText(TranslationBase.of(context).historyOfPresentIllness.toUpperCase(), variant: isHistoryExpand ? "bodyText" : '', bold: isHistoryExpand ? true : true, color: Colors.black), ], ), InkWell( onTap: () { setState(() { isHistoryExpand = !isHistoryExpand; }); }, child: Icon(isHistoryExpand ? EvaIcons.arrowUp : EvaIcons.arrowDown)) ], ), bodyWidget: ListView.builder( physics: NeverScrollableScrollPhysics(), scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstCheifComplaint!.length, itemBuilder: (BuildContext ctxt, int index) { return Padding( padding: EdgeInsets.all(8.0), child: Container( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Row( children: [ Expanded( child: AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstCheifComplaint![index].hOPI! .trim(), ), ), SizedBox(width: 35.0), ], ), ], ), ), ); }), isExpand: isHistoryExpand, ), ), ), // SizedBox( // height: 30, // ), SizedBox( height: 30, ), if (model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0) Container( width: double.infinity, margin: EdgeInsets.only(top: 10, left: 10, right: 10), padding: EdgeInsets.all(8.0), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(10.0), ), border: Border.all(color: Colors.grey[200]!, width: 0.5), ), child: Padding( padding: const EdgeInsets.all(15.0), child: HeaderBodyExpandableNotifier( headerWidget: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ AppText(TranslationBase.of(context).assessment.toUpperCase(), variant: isAssessmentExpand ? "bodyText" : '', bold: isAssessmentExpand ? true : true, color: Colors.black), ], ), InkWell( onTap: () { setState(() { isAssessmentExpand = !isAssessmentExpand; }); }, child: Icon(isAssessmentExpand ? EvaIcons.arrowUp : EvaIcons.arrowDown)) ], ), bodyWidget: ListView.builder( physics: NeverScrollableScrollPhysics(), scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments!.length, itemBuilder: (BuildContext ctxt, int index) { return Padding( padding: EdgeInsets.all(8.0), child: Container( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Row( children: [ AppText( 'ICD: ', fontSize: 13.0, ), AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index].iCD10! .trim(), fontSize: 13.5, fontWeight: FontWeight.w700, ), SizedBox(width: 15.0), ], ), Row( children: [ AppText( TranslationBase.of(context).condition + ": ", fontSize: 12.5, ), Expanded( child: AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index] .condition! .trim(), fontSize: 13.0, fontWeight: FontWeight.w700, ), ), ], ), Row( children: [ Expanded( child: AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index] .description!, fontWeight: FontWeight.w700, fontSize: 15.0, ), ) ], ), Row( children: [ AppText( TranslationBase.of(context).type + ": ", fontSize: 15.5, ), Expanded( child: AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index].type!, fontSize: 16.0, fontWeight: FontWeight.w700, ), ), ], ), SizedBox( height: 15.0, ), AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index].remarks! .trim(), ), Divider( height: 1, color: Colors.grey, thickness: 1.0, ), SizedBox( height: 8.0, ), ], ), ), ); }), isExpand: isAssessmentExpand, ), ), ), SizedBox( height: 30, ), if (model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0) Container( width: double.infinity, margin: EdgeInsets.only(top: 10, left: 10, right: 10), padding: EdgeInsets.all(8.0), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(10.0), ), border: Border.all(color: Colors.grey[200]!, width: 0.5), ), child: Padding( padding: const EdgeInsets.all(15.0), child: HeaderBodyExpandableNotifier( headerWidget: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ AppText(TranslationBase.of(context).test.toUpperCase(), variant: isProcedureExpand ? "bodyText" : '', bold: isProcedureExpand ? true : true, color: Colors.black), ], ), InkWell( onTap: () { setState(() { isProcedureExpand = !isProcedureExpand; }); }, child: Icon(isProcedureExpand ? EvaIcons.arrowUp : EvaIcons.arrowDown)) ], ), bodyWidget: ListView.builder( physics: NeverScrollableScrollPhysics(), scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure!.length, itemBuilder: (BuildContext ctxt, int index) { return Padding( padding: EdgeInsets.all(8.0), child: Container( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Row( children: [ Column( children: [ AppText( 'Procedure ID: ', ), AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index] .procedureId! .trim(), fontSize: 13.5, fontWeight: FontWeight.w700, ), ], ), SizedBox(width: 35.0), Column( children: [ AppText( TranslationBase.of(context).orderDate + ": ", ), AppText( AppDateUtils.getDateFormatted(DateTime.parse( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index] .orderDate! .trim(), )), fontSize: 13.5, fontWeight: FontWeight.w700, ), ], ), ], ), SizedBox( height: 20.0, ), Row( children: [ Expanded( child: AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].procName!, fontWeight: FontWeight.w700, ), ) ], ), Row( children: [ AppText( 'CPT Code : ', ), AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].patientID .toString(), fontWeight: FontWeight.w700, ), ], ), SizedBox( height: 15.0, ), Divider( height: 1, color: Colors.grey, thickness: 1.0, ), SizedBox( height: 8.0, ), ], ), ), ); }), isExpand: isProcedureExpand, ), ), ), SizedBox( height: 30, ), if (model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0) Container( width: double.infinity, margin: EdgeInsets.only(top: 10, left: 10, right: 10), padding: EdgeInsets.all(8.0), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(10.0), ), border: Border.all(color: Colors.grey[200]!, width: 0.5), ), child: Padding( padding: const EdgeInsets.all(15.0), child: HeaderBodyExpandableNotifier( headerWidget: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ AppText(TranslationBase.of(context).physicalSystemExamination.toUpperCase(), variant: isPhysicalExam ? "bodyText" : '', bold: isPhysicalExam ? true : true, color: Colors.black), ], ), InkWell( onTap: () { setState(() { isPhysicalExam = !isPhysicalExam; }); }, child: Icon(isPhysicalExam ? EvaIcons.arrowUp : EvaIcons.arrowDown)) ], ), bodyWidget: ListView.builder( physics: NeverScrollableScrollPhysics(), scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam!.length, itemBuilder: (BuildContext ctxt, int index) { return Padding( padding: EdgeInsets.all(8.0), child: Container( child: Column( children: [ Row( children: [ AppText(TranslationBase.of(context).examType + ": "), AppText( model .medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam![index].examDesc!, fontWeight: FontWeight.w700, ), ], ), Row( children: [ AppText( model .medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam![index].examDesc!, fontWeight: FontWeight.w700, ) ], ), Row( children: [ AppText(TranslationBase.of(context).abnormal + ": "), AppText( model .medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam![index].abnormal!, fontWeight: FontWeight.w700, ), ], ), SizedBox( height: 15.0, ), AppText( model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam![index].remarks!, ), Divider( height: 1, color: Colors.grey, thickness: 1.0, ), SizedBox( height: 8.0, ), ], ), ), ); }), isExpand: isPhysicalExam, ), ), ), SizedBox( height: 30, ), ], ), ), ) : Center( child: ErrorMessage( error: TranslationBase.of(context).noDataAvailable, )) ], ), ), ), ), ), ), ); } }