/// Application-level constants and configurations /// /// This file contains app metadata, loyalty tier definitions, pagination settings, /// and other application-wide configuration values. library; // ============================================================================ // Loyalty Member Tiers // ============================================================================ /// Membership tier levels in the loyalty program /// /// Ordered from lowest to highest: /// - [MemberTier.gold]: Entry level (0-999 points) /// - [MemberTier.platinum]: Mid level (1000-4999 points) /// - [MemberTier.diamond]: Premium level (5000+ points) enum MemberTier { /// Gold tier - Entry level membership /// Requirements: 0-999 points /// Benefits: 1x points multiplier, basic discounts gold, /// Platinum tier - Mid level membership /// Requirements: 1000-4999 points /// Benefits: 1.5x points multiplier, priority support, special offers platinum, /// Diamond tier - Premium membership /// Requirements: 5000+ points /// Benefits: 2x points multiplier, exclusive rewards, VIP support, early access diamond, } /// Extension methods for MemberTier enum extension MemberTierExtension on MemberTier { /// Get display name for the tier String get displayName { switch (this) { case MemberTier.gold: return 'Gold'; case MemberTier.platinum: return 'Platinum'; case MemberTier.diamond: return 'Diamond'; } } /// Get Vietnamese display name String get displayNameVi { switch (this) { case MemberTier.gold: return 'Vàng'; case MemberTier.platinum: return 'Bạc'; case MemberTier.diamond: return 'Kim Cương'; } } /// Get points multiplier for earning rewards double get pointsMultiplier { switch (this) { case MemberTier.gold: return 1.0; case MemberTier.platinum: return 1.5; case MemberTier.diamond: return 2.0; } } /// Get minimum points required for this tier int get minPoints { switch (this) { case MemberTier.gold: return 0; case MemberTier.platinum: return 1000; case MemberTier.diamond: return 5000; } } /// Get maximum points for this tier (null for diamond = unlimited) int? get maxPoints { switch (this) { case MemberTier.gold: return 999; case MemberTier.platinum: return 4999; case MemberTier.diamond: return null; // Unlimited } } /// Get next tier (null if already at highest tier) MemberTier? get nextTier { switch (this) { case MemberTier.gold: return MemberTier.platinum; case MemberTier.platinum: return MemberTier.diamond; case MemberTier.diamond: return null; // Already at top } } /// Get tier from points value static MemberTier fromPoints(int points) { if (points >= MemberTier.diamond.minPoints) { return MemberTier.diamond; } else if (points >= MemberTier.platinum.minPoints) { return MemberTier.platinum; } else { return MemberTier.gold; } } } // ============================================================================ // User Types // ============================================================================ /// Types of users in the Worker app enum UserType { /// Contractor - Construction project managers (Thầu thợ) contractor, /// Architect - Design professionals (Kiến trúc sư) architect, /// Distributor - Product resellers (Đại lý phân phối) distributor, /// Broker - Real estate and construction brokers (Môi giới) broker, } /// Extension methods for UserType enum extension UserTypeExtension on UserType { /// Get display name String get displayName { switch (this) { case UserType.contractor: return 'Contractor'; case UserType.architect: return 'Architect'; case UserType.distributor: return 'Distributor'; case UserType.broker: return 'Broker'; } } /// Get Vietnamese display name String get displayNameVi { switch (this) { case UserType.contractor: return 'Thầu thợ'; case UserType.architect: return 'Kiến trúc sư'; case UserType.distributor: return 'Đại lý phân phối'; case UserType.broker: return 'Môi giới'; } } } // ============================================================================ // Order Status // ============================================================================ /// Order lifecycle status enum OrderStatus { /// Order placed, awaiting processing pending, /// Order is being prepared processing, /// Order is out for delivery shipping, /// Order delivered successfully completed, /// Order cancelled by user or system cancelled, } /// Extension methods for OrderStatus enum extension OrderStatusExtension on OrderStatus { String get displayName { switch (this) { case OrderStatus.pending: return 'Pending'; case OrderStatus.processing: return 'Processing'; case OrderStatus.shipping: return 'Shipping'; case OrderStatus.completed: return 'Completed'; case OrderStatus.cancelled: return 'Cancelled'; } } String get displayNameVi { switch (this) { case OrderStatus.pending: return 'Chờ xử lý'; case OrderStatus.processing: return 'Đang xử lý'; case OrderStatus.shipping: return 'Đang giao'; case OrderStatus.completed: return 'Hoàn thành'; case OrderStatus.cancelled: return 'Đã hủy'; } } } // ============================================================================ // Project Status // ============================================================================ /// Construction project lifecycle status enum ProjectStatus { /// Project in planning phase planning, /// Project actively in progress inProgress, /// Project completed completed, /// Project on hold onHold, /// Project cancelled cancelled, } extension ProjectStatusExtension on ProjectStatus { String get displayName { switch (this) { case ProjectStatus.planning: return 'Planning'; case ProjectStatus.inProgress: return 'In Progress'; case ProjectStatus.completed: return 'Completed'; case ProjectStatus.onHold: return 'On Hold'; case ProjectStatus.cancelled: return 'Cancelled'; } } String get displayNameVi { switch (this) { case ProjectStatus.planning: return 'Lên kế hoạch'; case ProjectStatus.inProgress: return 'Đang thực hiện'; case ProjectStatus.completed: return 'Hoàn thành'; case ProjectStatus.onHold: return 'Tạm dừng'; case ProjectStatus.cancelled: return 'Đã hủy'; } } } // ============================================================================ // Project Types // ============================================================================ /// Types of construction projects enum ProjectType { /// Residential construction residential, /// Commercial construction commercial, /// Industrial construction industrial, } extension ProjectTypeExtension on ProjectType { String get displayName { switch (this) { case ProjectType.residential: return 'Residential'; case ProjectType.commercial: return 'Commercial'; case ProjectType.industrial: return 'Industrial'; } } String get displayNameVi { switch (this) { case ProjectType.residential: return 'Dân dụng'; case ProjectType.commercial: return 'Thương mại'; case ProjectType.industrial: return 'Công nghiệp'; } } } // ============================================================================ // App Metadata // ============================================================================ /// Application constants class AppConstants { // Private constructor to prevent instantiation AppConstants._(); /// Application name static const String appName = 'Worker'; /// Full application name static const String appFullName = 'Worker - EuroTile & Vasta Stone'; /// Application version static const String appVersion = '1.0.0'; /// Build number static const int buildNumber = 1; /// Company name static const String companyName = 'EuroTile & Vasta Stone'; /// Support email static const String supportEmail = 'support@worker.example.com'; /// Support phone number (Vietnamese format) static const String supportPhone = '1900 xxxx'; /// Website URL static const String websiteUrl = 'https://worker.example.com'; // ============================================================================ // Pagination Settings // ============================================================================ /// Default page size for paginated lists static const int defaultPageSize = 20; /// Products page size static const int productsPageSize = 20; /// Orders page size static const int ordersPageSize = 10; /// Projects page size static const int projectsPageSize = 15; /// Notifications page size static const int notificationsPageSize = 25; /// Points history page size static const int pointsHistoryPageSize = 20; /// Maximum items to load at once static const int maxPageSize = 100; // ============================================================================ // Cache Settings // ============================================================================ /// Cache duration for products (in hours) static const int productsCacheDuration = 24; /// Cache duration for user profile (in hours) static const int profileCacheDuration = 1; /// Cache duration for categories (in hours) static const int categoriesCacheDuration = 48; /// Maximum cache size (in MB) static const int maxCacheSize = 100; // ============================================================================ // OTP Settings // ============================================================================ /// OTP code length (6 digits) static const int otpLength = 6; /// OTP resend cooldown (in seconds) static const int otpResendCooldown = 60; /// OTP validity duration (in minutes) static const int otpValidityMinutes = 5; // ============================================================================ // Referral Settings // ============================================================================ /// Points earned per successful referral static const int pointsPerReferral = 100; /// Points earned by the referred user on signup static const int welcomeBonusPoints = 50; // ============================================================================ // Order Settings // ============================================================================ /// Minimum order amount (in VND) static const double minOrderAmount = 100000; // 100,000 VND /// Free shipping threshold (in VND) static const double freeShippingThreshold = 1000000; // 1,000,000 VND /// Standard shipping fee (in VND) static const double standardShippingFee = 30000; // 30,000 VND /// Maximum items per order static const int maxItemsPerOrder = 50; // ============================================================================ // Image Settings // ============================================================================ /// Maximum avatar size (in MB) static const int maxAvatarSize = 5; /// Maximum product image size (in MB) static const int maxProductImageSize = 3; /// Supported image formats static const List supportedImageFormats = [ 'jpg', 'jpeg', 'png', 'webp', ]; /// Image quality for compression (0-100) static const int imageQuality = 85; // ============================================================================ // Search Settings // ============================================================================ /// Minimum search query length static const int minSearchLength = 2; /// Search debounce delay (in milliseconds) static const int searchDebounceMs = 500; /// Maximum search results static const int maxSearchResults = 50; // ============================================================================ // Date & Time Settings // ============================================================================ /// Default date format (Vietnamese: dd/MM/yyyy) static const String dateFormat = 'dd/MM/yyyy'; /// Date time format static const String dateTimeFormat = 'dd/MM/yyyy HH:mm'; /// Time format (24-hour) static const String timeFormat = 'HH:mm'; /// Full date time format static const String fullDateTimeFormat = 'EEEE, dd MMMM yyyy HH:mm'; // ============================================================================ // Validation Settings // ============================================================================ /// Minimum password length static const int minPasswordLength = 8; /// Maximum password length static const int maxPasswordLength = 50; /// Minimum name length static const int minNameLength = 2; /// Maximum name length static const int maxNameLength = 100; /// Vietnamese phone number regex pattern /// Matches: 0912345678, +84912345678, 84912345678 static const String phoneRegexPattern = r'^(0|\+84|84)[3|5|7|8|9][0-9]{8}$'; /// Email regex pattern static const String emailRegexPattern = r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$'; // ============================================================================ // Feature Flags // ============================================================================ /// Enable dark mode static const bool enableDarkMode = true; /// Enable biometric authentication static const bool enableBiometric = true; /// Enable push notifications static const bool enablePushNotifications = true; /// Enable offline mode static const bool enableOfflineMode = true; /// Enable analytics static const bool enableAnalytics = true; /// Enable crash reporting static const bool enableCrashReporting = true; }