313 lines
11 KiB
Dart
313 lines
11 KiB
Dart
/// Constantes globales de l'application
|
|
library app_constants;
|
|
|
|
/// Constantes de l'application UnionFlow
|
|
class AppConstants {
|
|
// Empêcher l'instanciation
|
|
AppConstants._();
|
|
|
|
// ============================================================================
|
|
// API & BACKEND
|
|
// ============================================================================
|
|
|
|
/// URL de base de l'API backend
|
|
static const String baseUrl = 'http://192.168.1.11:8080';
|
|
|
|
/// URL de base de Keycloak
|
|
static const String keycloakUrl = 'http://192.168.1.11:8180';
|
|
|
|
/// Realm Keycloak
|
|
static const String keycloakRealm = 'unionflow';
|
|
|
|
/// Client ID Keycloak
|
|
static const String keycloakClientId = 'unionflow-mobile';
|
|
|
|
/// Redirect URI pour l'authentification
|
|
static const String redirectUri = 'dev.lions.unionflow-mobile://auth/callback';
|
|
|
|
// ============================================================================
|
|
// PAGINATION
|
|
// ============================================================================
|
|
|
|
/// Taille de page par défaut pour les listes paginées
|
|
static const int defaultPageSize = 20;
|
|
|
|
/// Taille de page maximale
|
|
static const int maxPageSize = 100;
|
|
|
|
/// Taille de page minimale
|
|
static const int minPageSize = 5;
|
|
|
|
/// Page initiale
|
|
static const int initialPage = 0;
|
|
|
|
// ============================================================================
|
|
// TIMEOUTS
|
|
// ============================================================================
|
|
|
|
/// Timeout de connexion (en secondes)
|
|
static const Duration connectTimeout = Duration(seconds: 30);
|
|
|
|
/// Timeout d'envoi (en secondes)
|
|
static const Duration sendTimeout = Duration(seconds: 30);
|
|
|
|
/// Timeout de réception (en secondes)
|
|
static const Duration receiveTimeout = Duration(seconds: 30);
|
|
|
|
// ============================================================================
|
|
// CACHE
|
|
// ============================================================================
|
|
|
|
/// Durée d'expiration du cache (en heures)
|
|
static const Duration cacheExpiration = Duration(hours: 1);
|
|
|
|
/// Durée d'expiration du cache pour les données statiques (en jours)
|
|
static const Duration staticCacheExpiration = Duration(days: 7);
|
|
|
|
/// Taille maximale du cache (en MB)
|
|
static const int maxCacheSize = 100;
|
|
|
|
// ============================================================================
|
|
// UI & DESIGN
|
|
// ============================================================================
|
|
|
|
/// Padding par défaut
|
|
static const double defaultPadding = 16.0;
|
|
|
|
/// Padding petit
|
|
static const double smallPadding = 8.0;
|
|
|
|
/// Padding large
|
|
static const double largePadding = 24.0;
|
|
|
|
/// Padding extra large
|
|
static const double extraLargePadding = 32.0;
|
|
|
|
/// Rayon de bordure par défaut
|
|
static const double defaultRadius = 8.0;
|
|
|
|
/// Rayon de bordure petit
|
|
static const double smallRadius = 4.0;
|
|
|
|
/// Rayon de bordure large
|
|
static const double largeRadius = 12.0;
|
|
|
|
/// Rayon de bordure extra large
|
|
static const double extraLargeRadius = 16.0;
|
|
|
|
/// Hauteur de l'AppBar
|
|
static const double appBarHeight = 56.0;
|
|
|
|
/// Hauteur du BottomNavigationBar
|
|
static const double bottomNavBarHeight = 60.0;
|
|
|
|
/// Largeur maximale pour les écrans larges (tablettes, desktop)
|
|
static const double maxContentWidth = 1200.0;
|
|
|
|
// ============================================================================
|
|
// ANIMATIONS
|
|
// ============================================================================
|
|
|
|
/// Durée d'animation par défaut
|
|
static const Duration defaultAnimationDuration = Duration(milliseconds: 300);
|
|
|
|
/// Durée d'animation rapide
|
|
static const Duration fastAnimationDuration = Duration(milliseconds: 150);
|
|
|
|
/// Durée d'animation lente
|
|
static const Duration slowAnimationDuration = Duration(milliseconds: 500);
|
|
|
|
// ============================================================================
|
|
// VALIDATION
|
|
// ============================================================================
|
|
|
|
/// Longueur minimale du mot de passe
|
|
static const int minPasswordLength = 8;
|
|
|
|
/// Longueur maximale du mot de passe
|
|
static const int maxPasswordLength = 128;
|
|
|
|
/// Longueur minimale du nom
|
|
static const int minNameLength = 2;
|
|
|
|
/// Longueur maximale du nom
|
|
static const int maxNameLength = 100;
|
|
|
|
/// Longueur maximale de la description
|
|
static const int maxDescriptionLength = 1000;
|
|
|
|
/// Longueur maximale du titre
|
|
static const int maxTitleLength = 200;
|
|
|
|
// ============================================================================
|
|
// FORMATS
|
|
// ============================================================================
|
|
|
|
/// Format de date par défaut (dd/MM/yyyy)
|
|
static const String defaultDateFormat = 'dd/MM/yyyy';
|
|
|
|
/// Format de date et heure (dd/MM/yyyy HH:mm)
|
|
static const String defaultDateTimeFormat = 'dd/MM/yyyy HH:mm';
|
|
|
|
/// Format de date court (dd/MM/yy)
|
|
static const String shortDateFormat = 'dd/MM/yy';
|
|
|
|
/// Format de date long (EEEE dd MMMM yyyy)
|
|
static const String longDateFormat = 'EEEE dd MMMM yyyy';
|
|
|
|
/// Format d'heure (HH:mm)
|
|
static const String timeFormat = 'HH:mm';
|
|
|
|
/// Format d'heure avec secondes (HH:mm:ss)
|
|
static const String timeWithSecondsFormat = 'HH:mm:ss';
|
|
|
|
// ============================================================================
|
|
// DEVISE
|
|
// ============================================================================
|
|
|
|
/// Devise par défaut
|
|
static const String defaultCurrency = 'EUR';
|
|
|
|
/// Symbole de la devise par défaut
|
|
static const String defaultCurrencySymbol = '€';
|
|
|
|
// ============================================================================
|
|
// IMAGES
|
|
// ============================================================================
|
|
|
|
/// Taille maximale d'upload d'image (en MB)
|
|
static const int maxImageUploadSize = 5;
|
|
|
|
/// Formats d'image acceptés
|
|
static const List<String> acceptedImageFormats = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
|
|
|
|
/// Qualité de compression d'image (0-100)
|
|
static const int imageCompressionQuality = 85;
|
|
|
|
// ============================================================================
|
|
// DOCUMENTS
|
|
// ============================================================================
|
|
|
|
/// Taille maximale d'upload de document (en MB)
|
|
static const int maxDocumentUploadSize = 10;
|
|
|
|
/// Formats de document acceptés
|
|
static const List<String> acceptedDocumentFormats = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'txt'];
|
|
|
|
// ============================================================================
|
|
// NOTIFICATIONS
|
|
// ============================================================================
|
|
|
|
/// Durée d'affichage des snackbars (en secondes)
|
|
static const Duration snackbarDuration = Duration(seconds: 3);
|
|
|
|
/// Durée d'affichage des snackbars d'erreur (en secondes)
|
|
static const Duration errorSnackbarDuration = Duration(seconds: 5);
|
|
|
|
/// Durée d'affichage des snackbars de succès (en secondes)
|
|
static const Duration successSnackbarDuration = Duration(seconds: 2);
|
|
|
|
// ============================================================================
|
|
// RECHERCHE
|
|
// ============================================================================
|
|
|
|
/// Délai de debounce pour la recherche (en millisecondes)
|
|
static const Duration searchDebounce = Duration(milliseconds: 500);
|
|
|
|
/// Nombre minimum de caractères pour déclencher une recherche
|
|
static const int minSearchLength = 2;
|
|
|
|
// ============================================================================
|
|
// REFRESH
|
|
// ============================================================================
|
|
|
|
/// Intervalle de rafraîchissement automatique (en minutes)
|
|
static const Duration autoRefreshInterval = Duration(minutes: 5);
|
|
|
|
// ============================================================================
|
|
// STORAGE KEYS
|
|
// ============================================================================
|
|
|
|
/// Clé pour le token d'accès
|
|
static const String accessTokenKey = 'access_token';
|
|
|
|
/// Clé pour le refresh token
|
|
static const String refreshTokenKey = 'refresh_token';
|
|
|
|
/// Clé pour l'ID token
|
|
static const String idTokenKey = 'id_token';
|
|
|
|
/// Clé pour les données utilisateur
|
|
static const String userDataKey = 'user_data';
|
|
|
|
/// Clé pour les préférences de thème
|
|
static const String themePreferenceKey = 'theme_preference';
|
|
|
|
/// Clé pour les préférences de langue
|
|
static const String languagePreferenceKey = 'language_preference';
|
|
|
|
/// Clé pour le mode hors ligne
|
|
static const String offlineModeKey = 'offline_mode';
|
|
|
|
// ============================================================================
|
|
// REGEX PATTERNS
|
|
// ============================================================================
|
|
|
|
/// Pattern pour valider un email
|
|
static const String emailPattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
|
|
|
|
/// Pattern pour valider un numéro de téléphone français
|
|
static const String phonePattern = r'^(?:(?:\+|00)33|0)\s*[1-9](?:[\s.-]*\d{2}){4}$';
|
|
|
|
/// Pattern pour valider un code postal français
|
|
static const String postalCodePattern = r'^\d{5}$';
|
|
|
|
/// Pattern pour valider une URL
|
|
static const String urlPattern = r'^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$';
|
|
|
|
// ============================================================================
|
|
// FEATURES FLAGS
|
|
// ============================================================================
|
|
|
|
/// Activer le mode debug
|
|
static const bool enableDebugMode = true;
|
|
|
|
/// Activer les logs
|
|
static const bool enableLogging = true;
|
|
|
|
/// Activer le mode offline
|
|
static const bool enableOfflineMode = false;
|
|
|
|
/// Activer les analytics
|
|
static const bool enableAnalytics = false;
|
|
|
|
/// Activer le crash reporting
|
|
static const bool enableCrashReporting = false;
|
|
|
|
// ============================================================================
|
|
// APP INFO
|
|
// ============================================================================
|
|
|
|
/// Nom de l'application
|
|
static const String appName = 'UnionFlow';
|
|
|
|
/// Version de l'application
|
|
static const String appVersion = '1.0.0';
|
|
|
|
/// Build number
|
|
static const String buildNumber = '1';
|
|
|
|
/// Email de support
|
|
static const String supportEmail = 'support@unionflow.com';
|
|
|
|
/// URL du site web
|
|
static const String websiteUrl = 'https://unionflow.com';
|
|
|
|
/// URL des conditions d'utilisation
|
|
static const String termsOfServiceUrl = 'https://unionflow.com/terms';
|
|
|
|
/// URL de la politique de confidentialité
|
|
static const String privacyPolicyUrl = 'https://unionflow.com/privacy';
|
|
}
|
|
|