From 10877ac65839edb112b4a5e014284e2e4b20543e Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Wed, 3 Jun 2020 10:17:25 +0300 Subject: [PATCH 1/2] improve vital sign item details --- lib/routes.dart | 13 +-- .../vital_sign/vital_sign_details_screen.dart | 91 ++----------------- .../profile/vital_sign/vital_sign_item.dart | 79 ++++++++++++++++ ...rt => vital_sign_item_details_screen.dart} | 30 ++---- ...dart => vital_sing_chart_and_detials.dart} | 0 .../shared/charts/app_time_series_chart.dart | 14 ++- 6 files changed, 110 insertions(+), 117 deletions(-) create mode 100644 lib/screens/patients/profile/vital_sign/vital_sign_item.dart rename lib/screens/patients/profile/vital_sign/{body_measurements_screen.dart => vital_sign_item_details_screen.dart} (82%) rename lib/screens/patients/profile/vital_sign/{vital_ding_chart_and_detials.dart => vital_sing_chart_and_detials.dart} (100%) diff --git a/lib/routes.dart b/lib/routes.dart index 9c87ff2f..f90e1ba9 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,11 +1,4 @@ -import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/screens/patients/profile/insurance_approvals_screen.dart'; -import 'package:doctor_app_flutter/screens/patients/profile/patient_orders_screen.dart'; -import 'package:doctor_app_flutter/screens/patients/profile/progress_note_screen.dart'; - -import './screens/patients/profile/vital_sign/body_measurements_screen.dart'; - import './screens/QR_reader_screen.dart'; import './screens/auth/change_password_screen.dart'; import './screens/auth/login_screen.dart'; @@ -21,11 +14,15 @@ import './screens/medicine/pharmacies_list_screen.dart'; import './screens/patients/patient_search_screen.dart'; import './screens/patients/patients_referred_screen.dart'; import './screens/patients/patients_screen.dart'; +import './screens/patients/profile/insurance_approvals_screen.dart'; import './screens/patients/profile/lab_result/lab_orders_screen.dart'; +import './screens/patients/profile/patient_orders_screen.dart'; import './screens/patients/profile/patient_profile_screen.dart'; import './screens/patients/profile/prescriptions/prescriptions_screen.dart'; +import './screens/patients/profile/progress_note_screen.dart'; import './screens/patients/profile/radiology/radiology_screen.dart'; import './screens/patients/profile/vital_sign/vital_sign_details_screen.dart'; +import './screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart'; import './screens/patients/profile/vital_sign/vital_sign_screen.dart'; import './screens/profile_screen.dart'; import './screens/settings/settings_screen.dart'; @@ -91,5 +88,5 @@ var routes = { PATIENT_ORDERS: (_) => PatientsOrdersScreen(), PATIENT_INSURANCE_APPROVALS: (_) => InsuranceApprovalsScreen(), VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(), - BODY_MEASUREMENTS: (_) => BodyMeasurementsScreen() + BODY_MEASUREMENTS: (_) => VitalSignItemDetailsScreen() }; diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart index 8b9cbead..ca21e7aa 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart @@ -1,16 +1,16 @@ -import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; -import 'package:doctor_app_flutter/lookups/patient_lookup.dart'; -import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; -import 'package:doctor_app_flutter/models/patient/vital_sign_req_model.dart'; -import 'package:doctor_app_flutter/providers/patients_provider.dart'; -import 'package:doctor_app_flutter/routes.dart'; -import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; -import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import '../../../../config/shared_pref_kay.dart'; import '../../../../config/size_config.dart'; +import '../../../../lookups/patient_lookup.dart'; +import '../../../../models/patient/patiant_info_model.dart'; +import '../../../../models/patient/vital_sign_req_model.dart'; import '../../../../models/patient/vital_sign_res_model.dart'; +import '../../../../providers/patients_provider.dart'; +import '../../../../routes.dart'; +import '../../../../screens/patients/profile/vital_sign/vital_sign_item.dart'; +import '../../../../util/dr_app_shared_pref.dart'; import '../../../../widgets/shared/app_scaffold_widget.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); @@ -199,78 +199,3 @@ class _VitalSignDetailsScreenState extends State { } } -class VitalSignItem extends StatelessWidget { - const VitalSignItem( - {Key key, - @required this.url, - @required this.des, - this.lastVal = 'N/A', - this.unit = '', - this.height, - this.width}) - : super(key: key); - - final String url; - final String des; - final String lastVal; - final String unit; - - final double height; - final double width; - - @override - Widget build(BuildContext context) { - return RoundedContainer( - margin: 0.025 * SizeConfig.realScreenWidth, - height: 0.14 * SizeConfig.realScreenHeight, - width: 0.45 * SizeConfig.realScreenWidth, - child: Container( - padding: EdgeInsets.all(5), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 2, - child: Text( - des, - style: TextStyle( - fontSize: 1.7 * SizeConfig.textMultiplier, - color: Theme.of(context).primaryColor, - fontWeight: FontWeight.bold), - ), - ), - Expanded( - flex: 1, - child: Column( - // mainAxisAlignment: MainAxisAlignment.spaceEvenly, - // crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Image.asset( - url, - height: SizeConfig.heightMultiplier * 7, - ), - ), - Expanded( - child: RichText( - text: TextSpan( - style: TextStyle(color: Colors.black), - children: [ - new TextSpan(text: lastVal), - new TextSpan( - text: ' ${unit}', - style: - TextStyle(color: Theme.of(context).primaryColor)), - ], - ), - )) - ], - ), - ) - ], - ), - ), - ); - } -} diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_item.dart b/lib/screens/patients/profile/vital_sign/vital_sign_item.dart new file mode 100644 index 00000000..702d7bac --- /dev/null +++ b/lib/screens/patients/profile/vital_sign/vital_sign_item.dart @@ -0,0 +1,79 @@ +import 'package:flutter/material.dart'; + +import '../../../../config/size_config.dart'; +import '../../../../widgets/shared/rounded_container_widget.dart'; +class VitalSignItem extends StatelessWidget { + const VitalSignItem( + {Key key, + @required this.url, + @required this.des, + this.lastVal = 'N/A', + this.unit = '', + this.height, + this.width}) + : super(key: key); + + final String url; + final String des; + final String lastVal; + final String unit; + + final double height; + final double width; + + @override + Widget build(BuildContext context) { + return RoundedContainer( + margin: 0.025 * SizeConfig.realScreenWidth, + height: 0.14 * SizeConfig.realScreenHeight, + width: 0.45 * SizeConfig.realScreenWidth, + child: Container( + padding: EdgeInsets.all(5), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 2, + child: Text( + des, + style: TextStyle( + fontSize: 1.7 * SizeConfig.textMultiplier, + color: Theme.of(context).primaryColor, + fontWeight: FontWeight.bold), + ), + ), + Expanded( + flex: 1, + child: Column( + // mainAxisAlignment: MainAxisAlignment.spaceEvenly, + // crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Image.asset( + url, + height: SizeConfig.heightMultiplier * 7, + ), + ), + Expanded( + child: RichText( + text: TextSpan( + style: TextStyle(color: Colors.black), + children: [ + new TextSpan(text: lastVal), + new TextSpan( + text: ' ${unit}', + style: + TextStyle(color: Theme.of(context).primaryColor)), + ], + ), + )) + ], + ), + ) + ], + ), + ), + ); + } +} diff --git a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart similarity index 82% rename from lib/screens/patients/profile/vital_sign/body_measurements_screen.dart rename to lib/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart index eb1f011d..8acfeaf0 100644 --- a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart @@ -1,15 +1,14 @@ -import 'package:doctor_app_flutter/lookups/patient_lookup.dart'; -import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; -import 'package:doctor_app_flutter/providers/patients_provider.dart'; -import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_ding_chart_and_detials.dart'; -import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/charts/app_time_series_chart.dart'; -import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -class BodyMeasurementsScreen extends StatelessWidget { - BodyMeasurementsScreen(); +import '../../../../lookups/patient_lookup.dart'; +import '../../../../models/patient/vital_sign_res_model.dart'; +import '../../../../providers/patients_provider.dart'; +import '../../../../screens/patients/profile/vital_sign/vital_sing_chart_and_detials.dart'; +import '../../../../widgets/shared/app_scaffold_widget.dart'; + +class VitalSignItemDetailsScreen extends StatelessWidget { + VitalSignItemDetailsScreen(); // ; PatientsProvider patientsProv; List vitalList = []; @@ -164,17 +163,4 @@ class BodyMeasurementsScreen extends StatelessWidget { } } -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/lib/screens/patients/profile/vital_sign/vital_ding_chart_and_detials.dart b/lib/screens/patients/profile/vital_sign/vital_sing_chart_and_detials.dart similarity index 100% rename from lib/screens/patients/profile/vital_sign/vital_ding_chart_and_detials.dart rename to lib/screens/patients/profile/vital_sign/vital_sing_chart_and_detials.dart diff --git a/lib/widgets/shared/charts/app_time_series_chart.dart b/lib/widgets/shared/charts/app_time_series_chart.dart index d22fb951..f581e1e7 100644 --- a/lib/widgets/shared/charts/app_time_series_chart.dart +++ b/lib/widgets/shared/charts/app_time_series_chart.dart @@ -1,10 +1,10 @@ import 'package:charts_flutter/flutter.dart' as charts; -import 'package:doctor_app_flutter/config/size_config.dart'; -import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; -import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/body_measurements_screen.dart'; -import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; +import '../../../config/size_config.dart'; +import '../../../models/patient/vital_sign_res_model.dart'; +import '../../../widgets/shared/rounded_container_widget.dart'; + class AppTimeSeriesChart extends StatelessWidget { AppTimeSeriesChart( {Key key, @@ -91,3 +91,9 @@ class AppTimeSeriesChart extends StatelessWidget { ]; } } +class TimeSeriesSales { + final DateTime time; + final int sales; + + TimeSeriesSales(this.time, this.sales); +} \ No newline at end of file From 489ad9e729e23a8f2c66f5c469fc6c6d321867d4 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Wed, 3 Jun 2020 15:16:25 +0300 Subject: [PATCH 2/2] improve code and add AppExpandableNotifier --- .../profile/insurance_approvals_screen.dart | 1 - .../profile/vital_sign/vital_sign_item.dart | 7 +++ .../vital_sign_item_details_screen.dart | 9 +++- .../vital_sing_chart_and_detials.dart | 38 ++++++++----- .../patients/vital_sign_details_wideget.dart | 7 ++- .../shared/app_expandable_notifier.dart | 53 +++++++++++++++++++ lib/widgets/shared/charts/app_line_chart.dart | 7 +++ .../shared/charts/app_time_series_chart.dart | 26 ++++++++- 8 files changed, 131 insertions(+), 17 deletions(-) create mode 100644 lib/widgets/shared/app_expandable_notifier.dart diff --git a/lib/screens/patients/profile/insurance_approvals_screen.dart b/lib/screens/patients/profile/insurance_approvals_screen.dart index e2d531c5..2015e106 100644 --- a/lib/screens/patients/profile/insurance_approvals_screen.dart +++ b/lib/screens/patients/profile/insurance_approvals_screen.dart @@ -1,6 +1,5 @@ import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/models/patient/insurance_aprovals_request.dart'; -import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_item.dart b/lib/screens/patients/profile/vital_sign/vital_sign_item.dart index 702d7bac..9e25af85 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_item.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_item.dart @@ -2,6 +2,13 @@ import 'package:flutter/material.dart'; import '../../../../config/size_config.dart'; import '../../../../widgets/shared/rounded_container_widget.dart'; +/* + *@author: Elham Rababah + *@Date:03/6/2020 + *@param: + *@return: + *@desc: VitalSignItem + */ class VitalSignItem extends StatelessWidget { const VitalSignItem( {Key key, diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart index 8acfeaf0..55f636d2 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart @@ -7,6 +7,14 @@ import '../../../../providers/patients_provider.dart'; import '../../../../screens/patients/profile/vital_sign/vital_sing_chart_and_detials.dart'; import '../../../../widgets/shared/app_scaffold_widget.dart'; + +/* + *@author: Elham Rababah + *@Date:03/6/2020 + *@param: + *@return: + *@desc: VitalSignItemDetailsScreen + */ class VitalSignItemDetailsScreen extends StatelessWidget { VitalSignItemDetailsScreen(); // ; @@ -145,7 +153,6 @@ class VitalSignItemDetailsScreen extends StatelessWidget { default: } - // generateData(); return AppScaffold( appBarTitle: pageTitle, body: ListView( diff --git a/lib/screens/patients/profile/vital_sign/vital_sing_chart_and_detials.dart b/lib/screens/patients/profile/vital_sign/vital_sing_chart_and_detials.dart index e01290c1..1bc5b55d 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sing_chart_and_detials.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sing_chart_and_detials.dart @@ -1,9 +1,21 @@ import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; import 'package:doctor_app_flutter/widgets/patients/vital_sign_details_wideget.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_expandable_notifier.dart'; import 'package:doctor_app_flutter/widgets/shared/charts/app_time_series_chart.dart'; +import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; +import 'package:expandable/expandable.dart'; import 'package:flutter/material.dart'; + +/* + *@author: Elham Rababah + *@Date:03/6/2020 + *@param: + *@return: + *@desc: VitalSingChartAndDetials + */ class VitalSingChartAndDetials extends StatelessWidget { - VitalSingChartAndDetials({ + VitalSingChartAndDetials({ Key key, @required this.vitalList, @required this.name, @@ -12,7 +24,7 @@ class VitalSingChartAndDetials extends StatelessWidget { @required this.title2, }) : super(key: key); - final List vitalList ; + final List vitalList; final String name; final String viewKey; final String title1; @@ -22,16 +34,18 @@ class VitalSingChartAndDetials extends StatelessWidget { Widget build(BuildContext context) { return Column( children: [ - AppTimeSeriesChart( - vitalList: vitalList, - chartName: name, - viewKey: viewKey, - ), - VitalSignDetailsWidget( - vitalList: vitalList.reversed.toList(), - title1: '${title1}', - title2: '${title2}', - viewKey: '${viewKey}', + AppExpandableNotifier( + headerWid: AppTimeSeriesChart( + vitalList: vitalList, + chartName: name, + viewKey: viewKey, + ), + bodyWid: VitalSignDetailsWidget( + vitalList: vitalList.reversed.toList(), + title1: '${title1}', + title2: '${title2}', + viewKey: '${viewKey}', + ), ), ], ); diff --git a/lib/widgets/patients/vital_sign_details_wideget.dart b/lib/widgets/patients/vital_sign_details_wideget.dart index 35e85699..7c91b499 100644 --- a/lib/widgets/patients/vital_sign_details_wideget.dart +++ b/lib/widgets/patients/vital_sign_details_wideget.dart @@ -11,7 +11,8 @@ class VitalSignDetailsWidget extends StatefulWidget { final String title2; final String viewKey; - VitalSignDetailsWidget({Key key, this.vitalList, this.title1, this.title2,this.viewKey}); + VitalSignDetailsWidget( + {Key key, this.vitalList, this.title1, this.title2, this.viewKey}); @override _VitalSignDetailsWidgetState createState() => _VitalSignDetailsWidgetState(); @@ -26,6 +27,10 @@ class _VitalSignDetailsWidgetState extends State { borderRadius: BorderRadius.only( topLeft: Radius.circular(10.0), ), + border: Border.all( + color: Colors.grey, + width: 0.5 + ), ), margin: EdgeInsets.all(20), child: Container( diff --git a/lib/widgets/shared/app_expandable_notifier.dart b/lib/widgets/shared/app_expandable_notifier.dart new file mode 100644 index 00000000..ca3edd09 --- /dev/null +++ b/lib/widgets/shared/app_expandable_notifier.dart @@ -0,0 +1,53 @@ +import 'package:expandable/expandable.dart'; +import 'package:flutter/material.dart'; + +class AppExpandableNotifier extends StatelessWidget { + final Widget headerWid; + final Widget bodyWid; + + AppExpandableNotifier({this.headerWid, this.bodyWid}); + @override + Widget build(BuildContext context) { + return ExpandableNotifier( + child: Padding( + padding: const EdgeInsets.all(10), + child: Card( + clipBehavior: Clip.antiAlias, + child: Column( + children: [ + SizedBox( + child: headerWid, + ), + ScrollOnExpand( + scrollOnExpand: true, + scrollOnCollapse: false, + child: ExpandablePanel( + theme: const ExpandableThemeData( + headerAlignment: ExpandablePanelHeaderAlignment.center, + tapBodyToCollapse: true, + ), + header: Padding( + padding: EdgeInsets.all(10), + child: Text( + "See Graph Details", + )), + collapsed: Text(''), + expanded: bodyWid, + builder: (_, collapsed, expanded) { + return Padding( + padding: EdgeInsets.only(left: 10, right: 10, bottom: 10), + child: Expandable( + collapsed: collapsed, + expanded: expanded, + theme: const ExpandableThemeData(crossFadePoint: 0), + ), + ); + }, + ), + ), + ], + ), + ), + )); + } +} diff --git a/lib/widgets/shared/charts/app_line_chart.dart b/lib/widgets/shared/charts/app_line_chart.dart index 554eafa1..35320962 100644 --- a/lib/widgets/shared/charts/app_line_chart.dart +++ b/lib/widgets/shared/charts/app_line_chart.dart @@ -1,6 +1,13 @@ import 'package:flutter/material.dart'; import 'package:charts_flutter/flutter.dart' as charts; +/* + *@author: Elham Rababah + *@Date:03/6/2020 + *@param: + *@return: + *@desc: AppLineChart + */ class AppLineChart extends StatelessWidget { const AppLineChart({ Key key, diff --git a/lib/widgets/shared/charts/app_time_series_chart.dart b/lib/widgets/shared/charts/app_time_series_chart.dart index f581e1e7..1ffb1afb 100644 --- a/lib/widgets/shared/charts/app_time_series_chart.dart +++ b/lib/widgets/shared/charts/app_time_series_chart.dart @@ -5,8 +5,15 @@ import '../../../config/size_config.dart'; import '../../../models/patient/vital_sign_res_model.dart'; import '../../../widgets/shared/rounded_container_widget.dart'; +/* + *@author: Elham Rababah + *@Date:03/6/2020 + *@param: + *@return: + *@desc: AppTimeSeriesChart + */ class AppTimeSeriesChart extends StatelessWidget { - AppTimeSeriesChart( + AppTimeSeriesChart( {Key key, @required this.vitalList, @required this.viewKey, @@ -66,6 +73,13 @@ class AppTimeSeriesChart extends StatelessWidget { ); } + /* + *@author: Elham Rababah + *@Date:03/6/2020 + *@param: + *@return: + *@desc: generateData + */ generateData() { final List data = []; if (vitalList.length > 0) { @@ -91,9 +105,17 @@ class AppTimeSeriesChart extends StatelessWidget { ]; } } + +/* + *@author: Elham Rababah + *@Date:03/6/2020 + *@param: + *@return: + *@desc: TimeSeriesSales + */ class TimeSeriesSales { final DateTime time; final int sales; TimeSeriesSales(this.time, this.sales); -} \ No newline at end of file +}