diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/pages/client_home_page.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/pages/client_home_page.dart index 371179f8..109e4aa4 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/pages/client_home_page.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/pages/client_home_page.dart @@ -74,14 +74,21 @@ class ClientHomePage extends StatelessWidget { /// Builds the widget list in normal mode with visibility filters. Widget _buildNormalModeList(ClientHomeState state) { + final List visibleWidgets = state.widgetOrder.where((String id) { + if (id == 'reorder' && state.reorderItems.isEmpty) { + return false; + } + return state.widgetVisibility[id] ?? true; + }).toList(); + return ListView.separated( padding: const EdgeInsets.only(bottom: 100), separatorBuilder: (BuildContext context, int index) { return const Divider(color: UiColors.border, height: 0.2); }, - itemCount: state.widgetOrder.length, + itemCount: visibleWidgets.length, itemBuilder: (BuildContext context, int index) { - final String id = state.widgetOrder[index]; + final String id = visibleWidgets[index]; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/coverage_widget.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/coverage_widget.dart index 473adc87..5c5769e2 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/coverage_widget.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/coverage_widget.dart @@ -26,6 +26,20 @@ class CoverageWidget extends StatelessWidget { @override Widget build(BuildContext context) { + Color backgroundColor; + Color textColor; + + if (coveragePercent == 100) { + backgroundColor = UiColors.tagActive; + textColor = UiColors.textSuccess; + } else if (coveragePercent >= 40) { + backgroundColor = UiColors.tagPending; + textColor = UiColors.textWarning; + } else { + backgroundColor = UiColors.tagError; + textColor = UiColors.textError; + } + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -46,13 +60,13 @@ class CoverageWidget extends StatelessWidget { 2, // 2px is not in metrics, using hardcoded for small tweaks or space0/space1 ), decoration: BoxDecoration( - color: UiColors.tagActive, + color: backgroundColor, borderRadius: UiConstants.radiusLg, ), child: Text( '$coveragePercent% Covered', style: UiTypography.footnote2b.copyWith( - color: UiColors.textSuccess, + color: textColor, ), ), ), @@ -64,7 +78,7 @@ class CoverageWidget extends StatelessWidget { style: UiTypography.body2r.textSecondary, ), ], - const SizedBox(height: UiConstants.space2), + const SizedBox(height: UiConstants.space6), Row( children: [ Expanded( @@ -76,7 +90,7 @@ class CoverageWidget extends StatelessWidget { ), ), const SizedBox(width: UiConstants.space2), - Expanded( + if (totalConfirmed != 0) Expanded( child: _MetricCard( icon: UiIcons.success, iconColor: UiColors.iconSuccess, diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/live_activity_widget.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/live_activity_widget.dart index 7c7c298a..7efa461f 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/live_activity_widget.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/live_activity_widget.dart @@ -130,13 +130,12 @@ class _LiveActivityWidgetState extends State { ], ), if (widget.subtitle != null) ...[ - const SizedBox(height: UiConstants.space1), Text( widget.subtitle!, style: UiTypography.body2r.textSecondary, ), ], - const SizedBox(height: UiConstants.space2), + const SizedBox(height: UiConstants.space6), FutureBuilder<_LiveActivityData>( future: _liveActivityFuture, builder: (BuildContext context, diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/reorder_widget.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/reorder_widget.dart index 4adb0461..fe9274b8 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/reorder_widget.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/reorder_widget.dart @@ -24,6 +24,10 @@ class ReorderWidget extends StatelessWidget { @override Widget build(BuildContext context) { + if (orders.isEmpty) { + return const SizedBox.shrink(); + } + final TranslationsClientHomeReorderEn i18n = t.client_home.reorder; final List recentOrders = orders; diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/spending_widget.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/spending_widget.dart index 123876c1..1d20ab63 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/spending_widget.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/spending_widget.dart @@ -43,13 +43,12 @@ class SpendingWidget extends StatelessWidget { ), ), if (subtitle != null) ...[ - const SizedBox(height: UiConstants.space1), Text( subtitle!, style: UiTypography.body2r.textSecondary, ), ], - const SizedBox(height: UiConstants.space2), + const SizedBox(height: UiConstants.space6), Container( padding: const EdgeInsets.all(UiConstants.space3), decoration: BoxDecoration( @@ -125,58 +124,6 @@ class SpendingWidget extends StatelessWidget { ), ], ), - const SizedBox(height: UiConstants.space3), - Container( - padding: const EdgeInsets.only(top: UiConstants.space3), - decoration: const BoxDecoration( - border: Border(top: BorderSide(color: Colors.white24)), - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: 24, - height: 24, - decoration: BoxDecoration( - color: Colors.white.withValues(alpha: 0.2), - shape: BoxShape.circle, - ), - child: const Center( - child: Icon( - UiIcons.sparkles, - color: UiColors.white, - size: 14, - ), - ), - ), - const SizedBox(width: UiConstants.space2), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - '💡 ' + - i18n.dashboard.insight_lightbulb(amount: '180'), - style: const TextStyle( - color: Colors.white, - fontSize: 10, - fontWeight: FontWeight.w600, - ), - ), - const SizedBox(height: 1), - Text( - i18n.dashboard.insight_tip, - style: TextStyle( - color: Colors.white.withValues(alpha: 0.8), - fontSize: 9, - ), - ), - ], - ), - ), - ], - ), - ), ], ), ), diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart index b3582dc1..343acc25 100644 --- a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart +++ b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart @@ -308,14 +308,15 @@ class _ViewOrderCardState extends State { children: [ Row( children: [ + if (order.workersNeeded != 0) const Icon( - UiIcons.success, + UiIcons.error, size: 16, - color: UiColors.textSuccess, + color: UiColors.textError, ), const SizedBox(width: 8), Text( - '${order.workersNeeded} Workers Filled', + '${order.workersNeeded} Workers Needed', style: UiTypography.body2m.textPrimary, ), ],