/// UI Constants for the Worker App /// /// Contains spacing, sizes, border radius, elevation values, and other /// UI-related constants used throughout the app. library; import 'package:flutter/material.dart'; /// Spacing constants following Material Design 8dp grid system class AppSpacing { AppSpacing._(); /// Extra small spacing: 4dp static const double xs = 4.0; /// Small spacing: 8dp static const double sm = 8.0; /// Medium spacing: 16dp static const double md = 16.0; /// Large spacing: 24dp static const double lg = 24.0; /// Extra large spacing: 32dp static const double xl = 32.0; /// Extra extra large spacing: 48dp static const double xxl = 48.0; } /// Border radius constants class AppRadius { AppRadius._(); /// Small radius: 4dp static const double sm = 4.0; /// Medium radius: 8dp static const double md = 8.0; /// Large radius: 12dp static const double lg = 12.0; /// Extra large radius: 16dp static const double xl = 16.0; /// Card radius: 12dp static const double card = 12.0; /// Button radius: 8dp static const double button = 8.0; /// Input field radius: 8dp static const double input = 8.0; /// Member card radius: 16dp static const double memberCard = 16.0; /// Circular radius for avatars and badges static const double circular = 9999.0; } /// Elevation constants for Material Design class AppElevation { AppElevation._(); /// No elevation static const double none = 0.0; /// Low elevation: 2dp static const double low = 2.0; /// Medium elevation: 4dp static const double medium = 4.0; /// High elevation: 8dp static const double high = 8.0; /// Card elevation: 2dp static const double card = 2.0; /// Button elevation: 2dp static const double button = 2.0; /// FAB elevation: 6dp static const double fab = 6.0; /// Member card elevation: 8dp static const double memberCard = 8.0; } /// Icon size constants class AppIconSize { AppIconSize._(); /// Extra small icon: 16dp static const double xs = 16.0; /// Small icon: 20dp static const double sm = 20.0; /// Medium icon: 24dp static const double md = 24.0; /// Large icon: 32dp static const double lg = 32.0; /// Extra large icon: 48dp static const double xl = 48.0; } /// App bar specifications class AppBarSpecs { AppBarSpecs._(); /// Standard app bar height static const double height = 56.0; /// App bar elevation static const double elevation = 0.0; /// App bar icon size static const double iconSize = AppIconSize.md; } /// Bottom navigation bar specifications class BottomNavSpecs { BottomNavSpecs._(); /// Bottom nav bar height static const double height = 72.0; /// Icon size for unselected state static const double iconSize = 24.0; /// Icon size for selected state static const double selectedIconSize = 28.0; /// Label font size static const double labelFontSize = 12.0; /// Bottom nav bar elevation static const double elevation = 8.0; } /// Floating Action Button specifications class FABSpecs { FABSpecs._(); /// FAB size static const double size = 56.0; /// FAB elevation static const double elevation = 6.0; /// FAB icon size static const double iconSize = 24.0; /// FAB position from bottom-right static const Offset position = Offset(16, 16); } /// Member card specifications class MemberCardSpecs { MemberCardSpecs._(); /// Card width (full width) static const double width = double.infinity; /// Card height static const double height = 200.0; /// Border radius static const double borderRadius = AppRadius.memberCard; /// Card elevation static const double elevation = AppElevation.memberCard; /// Card padding static const EdgeInsets padding = EdgeInsets.all(20.0); /// QR code size static const double qrSize = 80.0; /// QR code background size static const double qrBackgroundSize = 90.0; /// Points display font size static const double pointsFontSize = 28.0; /// Points display font weight static const FontWeight pointsFontWeight = FontWeight.bold; /// Member ID font size static const double memberIdFontSize = 14.0; /// Member name font size static const double memberNameFontSize = 18.0; } /// Button specifications class ButtonSpecs { ButtonSpecs._(); /// Button height static const double height = 48.0; /// Button minimum width static const double minWidth = 120.0; /// Button border radius static const double borderRadius = AppRadius.button; /// Button elevation static const double elevation = AppElevation.button; /// Button padding static const EdgeInsets padding = EdgeInsets.symmetric( horizontal: AppSpacing.lg, vertical: AppSpacing.md, ); /// Button font size static const double fontSize = 16.0; /// Button font weight static const FontWeight fontWeight = FontWeight.w600; } /// Input field specifications class InputFieldSpecs { InputFieldSpecs._(); /// Input field height static const double height = 56.0; /// Input field border radius static const double borderRadius = AppRadius.input; /// Input field content padding static const EdgeInsets contentPadding = EdgeInsets.symmetric( horizontal: AppSpacing.md, vertical: AppSpacing.md, ); /// Input field font size static const double fontSize = 16.0; /// Label font size static const double labelFontSize = 14.0; /// Hint font size static const double hintFontSize = 14.0; } /// Card specifications class CardSpecs { CardSpecs._(); /// Card border radius static const double borderRadius = AppRadius.card; /// Card elevation static const double elevation = AppElevation.card; /// Card padding static const EdgeInsets padding = EdgeInsets.all(AppSpacing.md); /// Card margin static const EdgeInsets margin = EdgeInsets.symmetric( horizontal: AppSpacing.md, vertical: AppSpacing.sm, ); } /// Product card specifications class ProductCardSpecs { ProductCardSpecs._(); /// Product image aspect ratio (width / height) static const double imageAspectRatio = 1.0; /// Product card border radius static const double borderRadius = AppRadius.card; /// Product card elevation static const double elevation = AppElevation.card; /// Product card padding static const EdgeInsets padding = EdgeInsets.all(AppSpacing.sm); /// Product name max lines static const int nameMaxLines = 2; /// Product name font size static const double nameFontSize = 14.0; /// Product price font size static const double priceFontSize = 16.0; /// Product price font weight static const FontWeight priceFontWeight = FontWeight.bold; } /// Order card specifications class OrderCardSpecs { OrderCardSpecs._(); /// Order number font size static const double orderNumberFontSize = 16.0; /// Order number font weight static const FontWeight orderNumberFontWeight = FontWeight.w600; /// Order date font size static const double dateFontSize = 12.0; /// Order total font size static const double totalFontSize = 18.0; /// Order total font weight static const FontWeight totalFontWeight = FontWeight.bold; } /// Status badge specifications class StatusBadgeSpecs { StatusBadgeSpecs._(); /// Badge height static const double height = 24.0; /// Badge border radius static const double borderRadius = 12.0; /// Badge padding static const EdgeInsets padding = EdgeInsets.symmetric( horizontal: AppSpacing.sm, vertical: 2.0, ); /// Badge font size static const double fontSize = 11.0; /// Badge font weight static const FontWeight fontWeight = FontWeight.w600; } /// Avatar specifications class AvatarSpecs { AvatarSpecs._(); /// Small avatar size static const double sm = 32.0; /// Medium avatar size static const double md = 48.0; /// Large avatar size static const double lg = 64.0; /// Extra large avatar size static const double xl = 96.0; } /// Animation durations class AppDuration { AppDuration._(); /// Short animation: 200ms static const Duration short = Duration(milliseconds: 200); /// Medium animation: 300ms static const Duration medium = Duration(milliseconds: 300); /// Long animation: 500ms static const Duration long = Duration(milliseconds: 500); /// Page transition duration static const Duration pageTransition = medium; /// Fade in duration static const Duration fadeIn = medium; /// Shimmer animation duration static const Duration shimmer = Duration(milliseconds: 1500); } /// Grid specifications class GridSpecs { GridSpecs._(); /// Product grid cross axis count (columns) static const int productGridColumns = 2; /// Product grid cross axis spacing static const double productGridCrossSpacing = AppSpacing.md; /// Product grid main axis spacing static const double productGridMainSpacing = AppSpacing.md; /// Quick action grid cross axis count static const int quickActionColumns = 3; /// Quick action grid cross axis spacing static const double quickActionCrossSpacing = AppSpacing.md; /// Quick action grid main axis spacing static const double quickActionMainSpacing = AppSpacing.md; } /// List specifications class ListSpecs { ListSpecs._(); /// List item padding static const EdgeInsets itemPadding = EdgeInsets.symmetric( horizontal: AppSpacing.md, vertical: AppSpacing.sm, ); /// List item divider height static const double dividerHeight = 1.0; /// List item divider indent static const double dividerIndent = AppSpacing.md; } /// Image specifications class ImageSpecs { ImageSpecs._(); /// Product image cache width static const int productImageCacheWidth = 400; /// Product image cache height static const int productImageCacheHeight = 400; /// Avatar image cache width static const int avatarImageCacheWidth = 200; /// Avatar image cache height static const int avatarImageCacheHeight = 200; /// Banner image cache width static const int bannerImageCacheWidth = 800; /// Banner image cache height static const int bannerImageCacheHeight = 400; } /// Screen breakpoints for responsive design class Breakpoints { Breakpoints._(); /// Small screen (phone) static const double sm = 600.0; /// Medium screen (tablet) static const double md = 960.0; /// Large screen (desktop) static const double lg = 1280.0; /// Extra large screen static const double xl = 1920.0; }