36 Widget
build(BuildContext context) {
37 return CustomScaffold(
41 isLeadingVisible:
false,
43 body: BlocBuilder<PeriodBloc, PeriodState>(
44 builder: (context, state) {
45 if (state is TodayStatisticsError || state is
PeriodError) {
46 return CustomErrorWidget(
52 return SingleChildScrollView(
62 crossAxisAlignment: CrossAxisAlignment.start,
64 LogoHeader(
title:
"dashboard.title".tr()),
65 BlocBuilder<PeriodBloc, PeriodState>(
66 buildWhen: (previous, current) => current is TodayStatisticsLoading || current is
TodayStatisticsLoaded,
67 builder: (context, state) {
68 if (state is TodayStatisticsLoading) {
69 return const TodayCollectionsShimmer();
71 final stats = state.statistics;
72 final doneVolume = stats.doneVolume ?? 0;
74 String formattedVolume = doneVolume >= 1000
75 ?
"${(doneVolume / 1000).toStringAsFixed(2)} MT"
76 :
"${doneVolume.toStringAsFixed(0)} KG";
78 return TodayCollections(
79 totalCollections: ((stats.collectionNumbersDone ?? 0) + (stats.canceledCollections ?? 0)).toString(),
80 collectionsVolume: formattedVolume,
81 done: stats.collectionNumbersDone?.toString() ??
"0",
82 canceled: stats.canceledCollections?.toString() ??
"0",
83 completedPercentage: stats.percentageCompleted?.toString() ??
"0",
84 pendingCollections: stats.pendingCollections?.toString() ??
"0",
92 onTimeRangeChanged: (
String newPeriod) {
100 BlocBuilder<PeriodBloc, PeriodState>(
101 buildWhen: (previous, current) => current is PeriodLoading || current is
PeriodLoaded,
102 builder: (context, state) {
103 if (state is PeriodLoading) {
104 return const TodayCollectionsShimmer();
106 final stats = state.statistics;
107 final doneVolume = stats.doneVolume ?? 0;
108 String formattedVolume = doneVolume >= 1000
109 ?
"${(doneVolume / 1000).toStringAsFixed(2)} MT"
110 :
"${doneVolume.toStringAsFixed(0)} KG";
111 return TodayCollections(
112 isPeriodSection:
true,
113 totalCollections: ((stats.collectionNumbersDone ?? 0) + (stats.canceledCollections ?? 0)).toString(),
114 collectionsVolume: formattedVolume,
115 done: stats.collectionNumbersDone?.toString() ??
"0",
116 canceled: stats.canceledCollections?.toString() ??
"0",
117 completedPercentage: stats.percentageCompleted?.toString() ??
"0",
118 pendingCollections: stats.pendingCollections?.toString() ??
"0",
style Column(crossAxisAlignment:CrossAxisAlignment.end, children:[Container(padding:EdgeInsets.symmetric(horizontal:8.w, vertical:4.h), decoration:BoxDecoration(color:ColorPalette.tiffanyBlue.withValues(alpha:0.1), borderRadius:BorderRadius.circular(12),), child:Text(collection.type ?? '', style:Theme.of(context).textTheme.bodySmall?.copyWith(color:ColorPalette.tiffanyBlue, fontWeight:FontWeight.bold,),),),],)