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/out_patient_stack.dart'; import 'package:doctor_app_flutter/widgets/dashboard/row_count.dart'; import 'package:doctor_app_flutter/widgets/dashboard/swiper_rounded_pagination.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 'package:flutter_swiper/flutter_swiper.dart'; import 'package:charts_flutter/flutter.dart' as charts; class DashboardSwipeWidget extends StatefulWidget { final List dashboardItemList; final DashboardViewModel model; final Function(int) sliderChange; DashboardSwipeWidget(this.dashboardItemList, this.model, this.sliderChange); @override _DashboardSwipeWidgetState createState() => _DashboardSwipeWidgetState(); } class _DashboardSwipeWidgetState extends State { int sliderActiveIndex = 0; @override Widget build(BuildContext context) { return Container( height: MediaQuery.of(context).size.height * 0.35, // height: 230, child: Swiper( onIndexChanged: (index) { if (mounted) { setState(() { sliderActiveIndex = index; widget.sliderChange(index); }); } }, itemBuilder: (BuildContext context, int index) { return getSwipeWidget(widget.dashboardItemList, index); }, itemCount: 3, // itemHeight: 300, pagination: new SwiperCustomPagination( builder: (BuildContext context, SwiperPluginConfig config) { return new Stack( alignment: Alignment.bottomCenter, children: [ Positioned( bottom: 0, child: Center( child: InkWell( onTap: () {}, child: Container( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ config.activeIndex == 0 ? SwiperRoundedPagination(true) : SwiperRoundedPagination(false), config.activeIndex == 1 ? SwiperRoundedPagination(true) : SwiperRoundedPagination(false), config.activeIndex == 2 ? SwiperRoundedPagination(true) : SwiperRoundedPagination(false), ], ), ), ), ), ) ], ); }), viewportFraction: 0.9, // scale: 0.9, // control: new SwiperControl(), ), ); } Widget getSwipeWidget(List dashboardItemList, int index) { if (index == 1) return RoundedContainer( raduis: 16, showBorder: true, borderColor: Colors.white, shadowWidth: 0.2, shadowSpreadRadius: 3, shadowDy: 1, margin: EdgeInsets.only(top: 15, bottom: 15, left: 10, right: 10), child: Padding( padding: const EdgeInsets.all(5.0), child: GetOutPatientStack(dashboardItemList[1]))); if (index == 0) return RoundedContainer( raduis: 16, showBorder: true, borderColor: Colors.white, shadowWidth: 0.2, shadowSpreadRadius: 3, shadowDy: 1, margin: EdgeInsets.only(top: 15, bottom: 15, left: 10, right: 10), child: Padding( padding: const EdgeInsets.all(5.0), child: GetOutPatientStack(dashboardItemList[0]))); if (index == 2) return RoundedContainer( raduis: 16, showBorder: true, 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, children: [ Expanded( flex: 1, child: Row( 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: [ AppText( TranslationBase.of(context) .patients, fontSize: 12, fontWeight: FontWeight.bold, fontHeight: 0.5, ), AppText( TranslationBase.of(context) .referral, fontSize: 22, fontWeight: FontWeight.bold, ), ], )), Expanded( flex: 1, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: RowCounts( dashboardItemList[2] .summaryoptions[0] .kPIParameter, dashboardItemList[2] .summaryoptions[0] .value, Colors.black), ), Expanded( child: RowCounts( dashboardItemList[2] .summaryoptions[1] .kPIParameter, dashboardItemList[2] .summaryoptions[1] .value, Colors.grey), ), Expanded( child: RowCounts( dashboardItemList[2] .summaryoptions[2] .kPIParameter, dashboardItemList[2] .summaryoptions[2] .value, Colors.red), ), ], ), ) ], )), ), Expanded( flex: 3, child: Stack(children: [ Container( child: GaugeChart( _createReferralData(widget.dashboardItemList))), Positioned( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ AppText( widget.model .getPatientCount(dashboardItemList[2]) .toString(), fontSize: SizeConfig.textMultiplier * 3.0, fontWeight: FontWeight.bold, ) ], ), top: MediaQuery.of(context).size.height * 0.13, left: 0, right: 0) ]), ), ], )), ])); return Container(); } 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; } }