From 494a44148dc26ea16f47b0e4451c30ba51564e44 Mon Sep 17 00:00:00 2001 From: Salman Afzal Date: Wed, 3 Jun 2020 12:39:09 +0300 Subject: [PATCH] patient profile --- .../profile/patient_profile_widget.dart | 64 ++- .../profile/profile_medical_info_widget.dart | 408 ++++++++++++------ lib/widgets/shared/profile_image_widget.dart | 38 +- 3 files changed, 344 insertions(+), 166 deletions(-) diff --git a/lib/widgets/patients/profile/patient_profile_widget.dart b/lib/widgets/patients/profile/patient_profile_widget.dart index 4dbcf39b..171d1256 100644 --- a/lib/widgets/patients/profile/patient_profile_widget.dart +++ b/lib/widgets/patients/profile/patient_profile_widget.dart @@ -1,6 +1,10 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/profile_image_widget.dart'; import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; import './Profile_general_info_Widget.dart'; import './profile_header_widget.dart'; @@ -15,19 +19,59 @@ import './profile_status_info_widget.dart'; *@desc: Patient Profile Widget */ class PatientProfileWidget extends StatelessWidget { - PatiantInformtion patient; - - + @override Widget build(BuildContext context) { - final routeArgs =ModalRoute.of(context).settings.arguments as Map; + final routeArgs = ModalRoute.of(context).settings.arguments as Map; patient = routeArgs['patient']; - return ListView(padding: EdgeInsets.zero, children: [ - ProfileHeaderWidget(patient: patient), - ProfileGeneralInfoWidget(patient: patient), - ProfileMedicalInfoWidget(patient: patient), - ProfileStatusInfoWidget() - ]); + // return ListView(padding: EdgeInsets.zero, children: [ + // ProfileHeaderWidget(patient: patient), + // ProfileGeneralInfoWidget(patient: patient), + // ProfileMedicalInfoWidget(patient: patient), + // ProfileStatusInfoWidget() + // ]); + + return Container( + child: Column(children: [ + Expanded( + flex: 1, + child: + Row(mainAxisAlignment: MainAxisAlignment.center, children: [ + Column(children: [ + Container( + padding: EdgeInsets.only(top: 20), + child: ProfileImageWidget( + url: + "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png", + name: patient.firstName + ' ' + patient.lastName, + fontsize: 24.0, + color: Colors.black, + ), + ), + Container( + child: Column( + children: [ + AppText( + 'File No: ' + patient.patientId.toString(), + fontWeight: FontWeight.normal, + fontSize: 16, + ), + AppText( + patient.genderDescription.toString() + ', ' + patient.age, + fontWeight: FontWeight.normal, + fontSize: 16, + ) + ], + ), + ) + ]), + ]), + ), + Expanded( + flex: 2, + child: ProfileMedicalInfoWidget(patient: patient), + ) + ])); } } diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index 657690be..4bb0421d 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -21,150 +21,202 @@ class ProfileMedicalInfoWidget extends StatelessWidget { PatiantInformtion patient; @override Widget build(BuildContext context) { - String url = "assets/images/"; - final double contWidth = SizeConfig.realScreenWidth * 0.70; - final double contHeight = SizeConfig.screenHeight * 0.30; + // final double contWidth = SizeConfig.realScreenWidth * 0.70; + // final double contHeight = SizeConfig.screenHeight * 0.30; + return CustomScrollView(primary: false, slivers: [ + SliverPadding( + padding: const EdgeInsets.fromLTRB(20, 30, 15, 10), + sliver: SliverGrid.count( + crossAxisSpacing: 10, + mainAxisSpacing: 20, + crossAxisCount: 2, + childAspectRatio: 1.5, + children: [ + PatientProfileButton( + key: key, + patient: patient, + name: 'Vital Sign', + route: VITAL_SIGN_DETAILS, + icon: 'heartbeat.png'), + PatientProfileButton( + key: key, + patient: patient, + route: LAB_ORDERS, + name: 'Lab Order', + icon: 'lab.png'), + PatientProfileButton( + key: key, + patient: patient, + route: PRESCRIPTIONS, + name: 'Prescription', + icon: 'note.png'), + PatientProfileButton( + key: key, + patient: patient, + route: RADIOLOGY, + name: 'Radiology', + icon: 'radiology-1.png'), + PatientProfileButton( + key: key, + patient: patient, + route: PROGRESS_NOTE, + name: 'Progress Notes', + icon: 'heartbeat.png'), + PatientProfileButton( + key: key, + patient: patient, + route: PATIENT_INSURANCE_APPROVALS, + name: 'Insurance Aprovals', + icon: 'lab.png'), + PatientProfileButton( + key: key, + patient: patient, + route: PRESCRIPTIONS, + name: 'Refer Patient', + icon: 'note.png'), + PatientProfileButton( + key: key, + patient: patient, + route: PATIENT_ORDERS, + name: 'Orders', + icon: 'radiology-1.png'), + ])) + ]); + // child: ListView( + // children: [ + // Padding( + // padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 14), + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // AppText( + // 'Patient Medical Information ', + // fontSize: SizeConfig.textMultiplier * 3, + // fontWeight: FontWeight.w700, + // color: Hexcolor('#58434F'), + // ), + // SizedBox( + // height: 20, + // ), + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceAround, + // children: [ + // InkWell( + // onTap: () { + // navigator(context, VITAL_SIGN_DETAILS); + // }, + // child: CircleAvatarWidget( + // des: 'Vital Sign', + // url: url + 'heartbeat.png', + // width: (contWidth) / 4.5, + // height: (contWidth) / 4.5, + // ), + // ), + // InkWell( + // onTap: () { + // navigator(context, LAB_ORDERS); + // }, + // child: CircleAvatarWidget( + // des: 'Lab Result', + // url: url + 'lab.png', + // width: (contWidth) / 4.5, + // height: (contWidth) / 4.5, + // ), + // ), + // InkWell( + // onTap: () { + // navigator(context, PRESCRIPTIONS); + // }, + // child: CircleAvatarWidget( + // des: 'Prescription', + // url: url + 'note.png', + // width: (contWidth) / 4.5, + // height: (contWidth) / 4.5, + // ), + // ), + // InkWell( + // //RADIOLOGY + // onTap: () { + // navigator(context, RADIOLOGY); + // }, + // child: CircleAvatarWidget( + // des: 'Radiology', + // url: url + 'radiology-1.png', + // width: (contWidth) / 4.5, + // height: (contWidth) / 4.5, + // ), + // ), + // ], + // ), + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceAround, + // children: [ + // Visibility( + // visible: selectedPatientType != 0 && selectedPatientType != 5 , + // child: InkWell( + // onTap: () { + // navigator(context, PROGRESS_NOTE); + // }, + // child: CircleAvatarWidget( + // des: 'Progress Notes', + // url: url + 'heartbeat.png', + // width: (contWidth) / 4.5, + // height: (contWidth) / 4.5, + // ), + // ), + // ), + // Visibility( - return RoundedContainer( - child: ListView( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 14), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - 'Patient Medical Information ', - fontSize: SizeConfig.textMultiplier * 3, - fontWeight: FontWeight.w700, - color: Hexcolor('#58434F'), - ), - SizedBox( - height: 20, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - InkWell( - onTap: () { - navigator(context, VITAL_SIGN_DETAILS); - }, - child: CircleAvatarWidget( - des: 'Vital Sign', - url: url + 'heartbeat.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, - ), - ), - InkWell( - onTap: () { - navigator(context, LAB_ORDERS); - }, - child: CircleAvatarWidget( - des: 'Lab Result', - url: url + 'lab.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, - ), - ), - InkWell( - onTap: () { - navigator(context, PRESCRIPTIONS); - }, - child: CircleAvatarWidget( - des: 'Prescription', - url: url + 'note.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, - ), - ), - InkWell( - //RADIOLOGY - onTap: () { - navigator(context, RADIOLOGY); - }, - child: CircleAvatarWidget( - des: 'Radiology', - url: url + 'radiology-1.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Visibility( - visible: selectedPatientType != 0 && selectedPatientType != 5 , - child: InkWell( - onTap: () { - navigator(context, PROGRESS_NOTE); - }, - child: CircleAvatarWidget( - des: 'Progress Notes', - url: url + 'heartbeat.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, - ), - ), - ), - Visibility( - - child: InkWell( - onTap: () { - navigator(context, PATIENT_INSURANCE_APPROVALS); - }, - child: CircleAvatarWidget( - des: 'Insurance Aprovals', - url: url + 'lab.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, - ), - ), - ), - Visibility( - visible: selectedPatientType != 0 && selectedPatientType != 5 && selectedPatientType != 2, - child: InkWell( - onTap: () { - navigator(context, PRESCRIPTIONS); - }, - child: CircleAvatarWidget( - des: 'Refer Patient ', - url: url + 'note.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, - ), - ), - ), - Visibility( - visible: selectedPatientType != 0 && selectedPatientType != 5, - child: InkWell( - onTap: () { - navigator(context, PATIENT_ORDERS); - }, - child: CircleAvatarWidget( - des: 'Orders', - url: url + 'radiology-1.png', - width: (contWidth) / 4.5, - height: (contWidth) / 4.5, - ), - ), - ), - ], - ) - ], - ), - ), - ], - ), - width: contWidth, - height: contHeight, - ); - } - - void navigator(BuildContext context, route) { - Navigator.of(context).pushNamed(route, arguments: {'patient': patient}); + // child: InkWell( + // onTap: () { + // navigator(context, PATIENT_INSURANCE_APPROVALS); + // }, + // child: CircleAvatarWidget( + // des: 'Insurance Aprovals', + // url: url + 'lab.png', + // width: (contWidth) / 4.5, + // height: (contWidth) / 4.5, + // ), + // ), + // ), + // Visibility( + // visible: selectedPatientType != 0 && selectedPatientType != 5 && selectedPatientType != 2, + // child: InkWell( + // onTap: () { + // navigator(context, PRESCRIPTIONS); + // }, + // child: CircleAvatarWidget( + // des: 'Refer Patient ', + // url: url + 'note.png', + // width: (contWidth) / 4.5, + // height: (contWidth) / 4.5, + // ), + // ), + // ), + // Visibility( + // visible: selectedPatientType != 0 && selectedPatientType != 5, + // child: InkWell( + // onTap: () { + // navigator(context, PATIENT_ORDERS); + // }, + // child: CircleAvatarWidget( + // des: 'Orders', + // url: url + 'radiology-1.png', + // width: (contWidth) / 4.5, + // height: (contWidth) / 4.5, + // ), + // ), + // ), + // ], + // ) + // ], + // ), + // ), + // ], + // ), + // width: contWidth, + // height: contHeight, + //); } } @@ -216,3 +268,73 @@ class CircleAvatarWidget extends StatelessWidget { ); } } + +class PatientProfileButton extends StatelessWidget { + final String name; + final String icon; + final dynamic route; + final PatiantInformtion patient; + final String url = "assets/images/"; + PatientProfileButton( + {Key key, this.patient, this.name, this.icon, this.route}) + : super(key: key); + @override + Widget build(BuildContext context) { + return new Container( + margin: new EdgeInsets.symmetric(horizontal: 4.0), + child: InkWell( + onTap: () { + navigator(context, this.route); + }, + child: Column(children: [ + Expanded( + flex: 1, + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.all(5), + child: new AppText( + this.name, + color: Colors.red, + fontWeight: FontWeight.w600, + textAlign: TextAlign.left, + fontSize: 16, + ), + ) + ], + ), + ), + Expanded( + flex: 1, + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Container( + padding: EdgeInsets.all(10), + child: new Image.asset(url + icon)) + ], + )) + ]), + ), + decoration: BoxDecoration( + // border: Border.all(), + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(10)), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.2), + spreadRadius: 5, + blurRadius: 7, + offset: Offset(0, 3), // changes position of shadow + ), + ], + ), + padding: EdgeInsets.fromLTRB(5, 10, 5, 5), + ); + } + + void navigator(BuildContext context, route) { + Navigator.of(context).pushNamed(route, arguments: {'patient': patient}); + } +} diff --git a/lib/widgets/shared/profile_image_widget.dart b/lib/widgets/shared/profile_image_widget.dart index 85f9c4b0..db22a13a 100644 --- a/lib/widgets/shared/profile_image_widget.dart +++ b/lib/widgets/shared/profile_image_widget.dart @@ -2,7 +2,6 @@ import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:flutter/material.dart'; - /* *@author: Elham Rababah *@Date:21/4/2020 @@ -17,13 +16,14 @@ class ProfileImageWidget extends StatelessWidget { double height; double width; Color color; - + double fontsize; ProfileImageWidget( {this.url, this.name, this.des, this.height, this.width, + this.fontsize, this.color = Colors.black}); @override @@ -40,17 +40,29 @@ class ProfileImageWidget extends StatelessWidget { backgroundColor: Colors.transparent, ), ), - name==null || des == null?SizedBox():SizedBox(height: 10,), - name==null?SizedBox():AppText( - name, - fontWeight: FontWeight.bold, - fontSize: SizeConfig.textMultiplier * 4, - color: color, - ), - des==null?SizedBox():AppText( - des, - fontSize: SizeConfig.textMultiplier * 2.5, - ) + name == null || des == null + ? SizedBox() + : SizedBox( + height: 10, + ), + name == null + ? SizedBox() + : AppText( + name, + fontWeight: FontWeight.bold, + fontSize: fontsize == null + ? SizeConfig.textMultiplier * 3.5 + : fontsize, + color: color, + ), + des == null + ? SizedBox() + : AppText( + des, + fontSize: fontsize == null + ? SizeConfig.textMultiplier * 2.5 + : fontsize, + ) ], ); }