import 'package:charts_flutter/flutter.dart' as charts; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart'; import 'package:doctor_app_flutter/models/dashboard/dashboard_model.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/dashboard/guage_chart.dart'; import 'package:doctor_app_flutter/widgets/dashboard/row_count.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'label.dart'; class DashboardReferralPatient extends StatelessWidget { final List? dashboardItemList; final double? height; final DashboardViewModel? model; const DashboardReferralPatient({Key? key, this.dashboardItemList, this.height, this.model}) : super(key: key); @override Widget build(BuildContext context) { return RoundedContainer( raduis: 16, showBorder: false, borderColor: Colors.white, shadowWidth: 0.2, shadowSpreadRadius: 3, shadowDy: 1, margin: EdgeInsets.only(top: 15, bottom: 15, left: 10, right: 10), child: Column(crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ Expanded( flex: 1, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( flex: 4, child: Padding( padding: const EdgeInsets.all(5.0), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.all(8), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( height: SizeConfig.getHeightMultiplier(height: height) * (SizeConfig.isHeightVeryShort ? 3 : SizeConfig.isHeightShort ? 2 : 2)), Label( firstLine: TranslationBase.of(context).patients, secondLine: TranslationBase.of(context).referral, color: Color(0xFF2B353E), secondLineFontSize: SizeConfig.getHeightMultiplier(height: height) * (SizeConfig.isHeightVeryShort ? 5 : SizeConfig.isHeightShort ? 7 : 12), ), SizedBox( height: SizeConfig.getHeightMultiplier(height: height) * (SizeConfig.isHeightVeryShort ? 5 : SizeConfig.isHeightShort ? 10 : 5)) ], ), ), Expanded( flex: 1, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ RowCounts( dashboardItemList![2].summaryoptions![0].kPIParameter, dashboardItemList![2].summaryoptions![0].value!, Colors.black, height: height!, ), RowCounts( dashboardItemList![2].summaryoptions![1].kPIParameter, dashboardItemList![2].summaryoptions![1].value!, Colors.grey, height: height!, ), RowCounts( dashboardItemList![2].summaryoptions![2].kPIParameter, dashboardItemList![2].summaryoptions![2].value!, Colors.red, height: height!, ), ], ), ) ], )), ), Expanded( flex: 3, child: Stack(children: [ Container(padding: EdgeInsets.all(0), child: GaugeChart(_createReferralData(dashboardItemList!))), Positioned( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ AppText( model!.getPatientCount(dashboardItemList![2]).toString(), fontSize: SizeConfig.textMultiplier * 3.0, fontWeight: FontWeight.bold, ) ], ), top: height! * (SizeConfig.isHeightVeryShort ? 0.35 : 0.40), left: 0, right: 0) ]), ), ], )), ])); } static List> _createReferralData(List dashboardItemList) { final data = [ new GaugeSegment(dashboardItemList[2].summaryoptions![0].kPIParameter!, getValue(dashboardItemList[1].summaryoptions![0].value), charts.MaterialPalette.black), new GaugeSegment(dashboardItemList[2].summaryoptions![1].kPIParameter!, getValue(dashboardItemList[1].summaryoptions![1].value), charts.MaterialPalette.gray.shadeDefault), new GaugeSegment(dashboardItemList[2].summaryoptions![2].kPIParameter!, getValue(dashboardItemList[1].summaryoptions![2].value), charts.MaterialPalette.red.shadeDefault), ]; return [ new charts.Series( id: 'Segments', domainFn: (GaugeSegment segment, _) => segment.segment, measureFn: (GaugeSegment segment, _) => segment.size, data: data, colorFn: (GaugeSegment segment, _) => segment.color, ) ]; } static int getValue(value) { return value == 0 ? 1 : value; } }