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/icons_app/doctor_app_icons.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/patients/profile/patient_profile_screen.dart'; import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_header_with_appointment_card_app_bar.dart'; import 'package:doctor_app_flutter/widgets/shared/Text.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'; 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) => model.getMedicalFile(mrn: pp), builder: (BuildContext context, MedicalFileViewModel model, Widget child) => AppScaffold( appBar: PatientProfileHeaderWhitAppointmentAppBar( patient: patient, patientType: patient.patientType.toString() ?? "0", arrivalType: patient.arrivedOn.toString() ?? 0, doctorName: doctorName, profileUrl: doctorImage, clinic: clinicName, isPrescriptions: true, isMedicalFile: true, episode: episode, vistDate: '${DateUtils.getDayMonthYearDateFormatted(DateUtils.getDateTimeFromServerFormat( vistDate, ), isArabic: projectViewModel.isArabic)}', ), isShowAppBar: true, appBarTitle: TranslationBase.of(context).medicalReport.toUpperCase(), body: NetworkBaseView( baseViewModel: model, child: SingleChildScrollView( child: Center( child: Container( child: Column( children: [ // PatientProfileHeaderNewDesign(patient, // patient.patientType.toString(), patient.arrivedOn), 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: [ // 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: Column( // children: [ // Row( // children: [ // if (model.medicalFileList.length != // 0 && // model // .medicalFileList[0] // .entityList[0] // .timelines[ // encounterNumber] // .timeLineEvents[0] // .consulations // .length != // 0) // Expanded( // child: AppText( // model // .medicalFileList[0] // .entityList[0] // .timelines[ // encounterNumber] // .timeLineEvents[0] // .consulations[0] // .doctorName // .toUpperCase(), // fontWeight: FontWeight.w700, // ), // ), // ], // ), // if (model.medicalFileList.length != 0) // Row( // children: [ // AppText( // TranslationBase.of(context) // .clinic + // ": ", // ), // if (model.medicalFileList // .length != // 0 && // model // .medicalFileList[0] // .entityList[0] // .timelines[ // encounterNumber] // .timeLineEvents[0] // .consulations // .length != // 0) // AppText( // model // .medicalFileList[0] // .entityList[0] // .timelines[ // encounterNumber] // .timeLineEvents[0] // .consulations[0] // .clinicName, // fontWeight: FontWeight.w700, // ), // ], // ), // Row( // children: [ // AppText( // TranslationBase.of(context) // .episode + // ": ", // //fontWeight: FontWeight.w700, // ), // if (model.medicalFileList.length != // 0 && // model // .medicalFileList[0] // .entityList[0] // .timelines[ // encounterNumber] // .timeLineEvents[0] // .consulations // .length != // 0) // AppText( // model // .medicalFileList[0] // .entityList[0] // .timelines[encounterNumber] // .timeLineEvents[0] // .consulations[0] // .episodeID // .toString(), // fontWeight: FontWeight.w700, // ), // ], // ), // Row( // children: [ // AppText( // TranslationBase.of(context) // .visitDate + // ": ", // //fontWeight: FontWeight.w700, // ), // if (model.medicalFileList.length != // 0 && // model // .medicalFileList[0] // .entityList[0] // .timelines[ // encounterNumber] // .timeLineEvents[0] // .consulations // .length != // 0) // AppText( // '${DateUtils.getDayMonthYearDateFormatted(DateUtils.getDateTimeFromServerFormat( // model // .medicalFileList[0] // .entityList[0] // .timelines[ // encounterNumber] // .date, // ), isArabic: projectViewModel.isArabic)}', // color: Colors.black, // fontWeight: FontWeight.w700, // fontSize: 14, // ), // SizedBox(width: 35.0), // // AppText( // // 'Appt Date : ', // // fontWeight: FontWeight.w700, // // ), // // AppText( // // '23/12/2020', // // ), // ], // ), // ], // ), // ), 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: [ Texts( 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: [ Texts( 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( '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( '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, // ), // Container( // width: double.infinity, // height: 1, // color: Color(0xffCCCCCC), // ), 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: [ Texts( 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( 'Order Date: ', ), AppText( Helpers.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, // ), // Container( // width: double.infinity, // height: 1, // color: Color(0xffCCCCCC), // ), 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: [ Texts( 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( 'Exam Type: ', ), 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( '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, ), // Container( // width: double.infinity, // height: 1, // color: Color(0xffCCCCCC), // ), ], ), ), ) : Text("There's no medical file for this patient") ], ), ), ), ), ), ), ); } }