This commit is contained in:
Phuoc Nguyen
2025-10-10 16:38:07 +07:00
parent e5b247d622
commit b94c158004
177 changed files with 25080 additions and 152 deletions

View File

@@ -0,0 +1,230 @@
/// Performance-related constants for the retail POS app
///
/// This file contains all performance tuning parameters:
/// - List/Grid performance settings
/// - Cache configurations
/// - Debounce/Throttle timings
/// - Memory limits
/// - Scroll performance settings
class PerformanceConstants {
// Private constructor to prevent instantiation
PerformanceConstants._();
// ==================== List/Grid Performance ====================
/// Cache extent for ListView/GridView (pixels to preload)
static const double listCacheExtent = 500.0;
/// Number of items to preload in infinite scroll
static const int preloadItemThreshold = 5;
/// Maximum items to render at once in very large lists
static const int maxVisibleItems = 100;
/// Grid crossAxisCount for different screen widths
static int getGridColumnCount(double screenWidth) {
if (screenWidth < 600) return 2; // Mobile portrait
if (screenWidth < 900) return 3; // Mobile landscape / Small tablet
if (screenWidth < 1200) return 4; // Tablet
return 5; // Desktop
}
/// Grid childAspectRatio for product cards
static const double productCardAspectRatio = 0.75;
/// Grid childAspectRatio for category cards
static const double categoryCardAspectRatio = 1.0;
/// Grid spacing
static const double gridSpacing = 12.0;
// ==================== Debounce/Throttle Timings ====================
/// Search input debounce (ms) - wait before executing search
static const int searchDebounceDuration = 300;
/// Filter input debounce (ms)
static const int filterDebounceDuration = 200;
/// Auto-save debounce (ms)
static const int autoSaveDebounceDuration = 1000;
/// Scroll position throttle (ms)
static const int scrollThrottleDuration = 100;
/// Network retry debounce (ms)
static const int retryDebounceDuration = 500;
// ==================== Animation Durations ====================
/// Standard animation duration
static const int animationDuration = 300;
/// Fast animation duration
static const int fastAnimationDuration = 150;
/// Image fade-in duration
static const int imageFadeDuration = 300;
/// Shimmer animation duration
static const int shimmerDuration = 1500;
// ==================== Memory Management ====================
/// Maximum image cache size in memory (MB)
static const int maxImageMemoryCacheMB = 50;
/// Maximum image cache count in memory
static const int maxImageMemoryCacheCount = 100;
/// Maximum disk cache size (MB)
static const int maxDiskCacheMB = 200;
/// Database cache size limit (number of items)
static const int maxDatabaseCacheItems = 1000;
// ==================== Network Performance ====================
/// Network request timeout (seconds)
static const int networkTimeoutSeconds = 30;
/// Network connect timeout (seconds)
static const int networkConnectTimeoutSeconds = 15;
/// Network receive timeout (seconds)
static const int networkReceiveTimeoutSeconds = 30;
/// Maximum concurrent image downloads
static const int maxConcurrentImageDownloads = 3;
/// Retry attempts for failed requests
static const int maxRetryAttempts = 3;
/// Retry delay (seconds)
static const int retryDelaySeconds = 2;
// ==================== Batch Operations ====================
/// Batch size for database operations
static const int databaseBatchSize = 50;
/// Batch size for image preloading
static const int imagePreloadBatchSize = 10;
/// Pagination page size
static const int paginationPageSize = 20;
// ==================== Build Optimization ====================
/// Whether to use RepaintBoundary for grid items
static const bool useRepaintBoundaryForGridItems = true;
/// Whether to use const constructors aggressively
static const bool useConstConstructors = true;
/// Whether to enable performance overlay in debug mode
static const bool enablePerformanceOverlay = false;
// ==================== Hive Database Performance ====================
/// Compact database after this many operations
static const int databaseCompactThreshold = 100;
/// Use lazy box for large datasets
static const bool useLazyBoxForProducts = true;
/// Cache database queries
static const bool cacheQueries = true;
/// Maximum database file size (MB) before warning
static const int maxDatabaseSizeMB = 100;
// ==================== Scroll Performance ====================
/// Physics for better scroll performance
static const bool useBouncingScrollPhysics = true;
/// Scroll controller jump threshold (prevent jarring jumps)
static const double scrollJumpThreshold = 1000.0;
/// Enable scroll momentum
static const bool enableScrollMomentum = true;
// ==================== State Management Performance ====================
/// Provider auto-dispose delay (seconds)
static const int providerAutoDisposeDelay = 60;
/// Keep alive duration for cached providers (seconds)
static const int providerKeepAliveDuration = 300;
/// Use provider.select() for granular rebuilds
static const bool useGranularRebuild = true;
// ==================== Image Loading Performance ====================
/// Image loading placeholder height
static const double placeholderHeight = 200.0;
/// Use progressive JPEG loading
static const bool useProgressiveLoading = true;
/// Preload images for next page
static const bool preloadNextPageImages = true;
/// Maximum image resolution (width x height)
static const int maxImageWidth = 1920;
static const int maxImageHeight = 1920;
// ==================== Frame Rate Targets ====================
/// Target frame rate
static const int targetFPS = 60;
/// Budget per frame (milliseconds)
static const double frameBudgetMs = 16.67; // 60 FPS
/// Warning threshold for long frames (ms)
static const double longFrameThresholdMs = 32.0;
// ==================== Cart Performance ====================
/// Maximum cart items before pagination
static const int maxCartItemsBeforePagination = 50;
/// Cart calculation debounce (ms)
static const int cartCalculationDebounce = 100;
// ==================== Responsive Breakpoints ====================
/// Mobile breakpoint
static const double mobileBreakpoint = 600.0;
/// Tablet breakpoint
static const double tabletBreakpoint = 900.0;
/// Desktop breakpoint
static const double desktopBreakpoint = 1200.0;
// ==================== Helper Methods ====================
/// Get appropriate cache extent based on device
static double getCacheExtent(double screenHeight) {
// Cache 1.5x screen height
return screenHeight * 1.5;
}
/// Get appropriate batch size based on memory
static int getDynamicBatchSize(int totalItems) {
if (totalItems < 100) return 20;
if (totalItems < 500) return 50;
if (totalItems < 1000) return 100;
return 200;
}
/// Check if device can handle high performance mode
static bool shouldUseHighPerformanceMode(double screenWidth) {
return screenWidth >= tabletBreakpoint;
}
}