import 'package:flutter/material.dart'; import 'package:flutter_lucide/flutter_lucide.dart'; import 'package:get/get.dart'; import 'package:marco/helpers/theme/app_theme.dart'; import 'package:marco/helpers/utils/mixins/ui_mixin.dart'; import 'package:marco/helpers/utils/my_shadow.dart'; import 'package:marco/helpers/widgets/my_breadcrumb.dart'; import 'package:marco/helpers/widgets/my_breadcrumb_item.dart'; import 'package:marco/helpers/widgets/my_card.dart'; import 'package:marco/helpers/widgets/my_container.dart'; import 'package:marco/helpers/widgets/my_spacing.dart'; import 'package:marco/helpers/widgets/my_text.dart'; import 'package:marco/view/layouts/layout.dart'; class DashboardScreen extends StatelessWidget with UIMixin { DashboardScreen({super.key}); static const String dashboardRoute = "/dashboard/attendance"; @override Widget build(BuildContext context) { return Layout( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: MySpacing.x(flexSpacing), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ MyText.titleMedium("Dashboard", fontSize: 18, fontWeight: 600), MyBreadcrumb(children: [MyBreadcrumbItem(name: 'Dashboard')]), ], ), ), MySpacing.height(flexSpacing), Padding( padding: MySpacing.x(flexSpacing / 2), child: Column( children: _buildDashboardStats(), ), ), ], ), ); } List _buildDashboardStats() { final stats = [ _StatItem(LucideIcons.gauge, "Dashboard", contentTheme.primary), _StatItem(LucideIcons.folder, "Projects", contentTheme.secondary), _StatItem(LucideIcons.scan_face, "Attendance", contentTheme.success), _StatItem(LucideIcons.logs, "Task", contentTheme.info), ]; return List.generate( (stats.length / 2).ceil(), (index) => Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ _buildStatCard(stats[index * 2]), if (index * 2 + 1 < stats.length) _buildStatCard(stats[index * 2 + 1]), ], ), ); } Widget _buildStatCard(_StatItem statItem) { return Expanded( child: InkWell( onTap: () => Get.toNamed(dashboardRoute), child: MyCard.bordered( borderRadiusAll: 10, border: Border.all(color: Colors.grey.withOpacity(0.2)), shadow: MyShadow(elevation: 1, position: MyShadowPosition.bottom), paddingAll: 24, height: 140, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ _buildStatCardIcon(statItem), MySpacing.height(12), MyText.labelSmall(statItem.title, maxLines: 1), ], ), ), ), ); } Widget _buildStatCardIcon(_StatItem statItem) { return MyContainer( paddingAll: 16, color: statItem.color.withOpacity(0.2), child: MyContainer( paddingAll: 8, color: statItem.color, child: Icon(statItem.icon, size: 16, color: contentTheme.light), ), ); } } class _StatItem { final IconData icon; final String title; final Color color; _StatItem(this.icon, this.title, this.color); }