193 lines
6.7 KiB
Dart
193 lines
6.7 KiB
Dart
/// Fichier contenant toutes les constantes utilisées dans l'application
|
|
/// Centralise les clés, noms de boîtes Hive, et autres constantes
|
|
/// pour faciliter la maintenance et éviter les erreurs de frappe
|
|
|
|
import 'package:flutter/foundation.dart' show kIsWeb;
|
|
import 'package:flutter/material.dart';
|
|
|
|
class AppKeys {
|
|
// Noms des boîtes Hive
|
|
static const String usersBoxName = 'users';
|
|
static const String amicaleBoxName = 'amicale';
|
|
static const String clientsBoxName = 'clients';
|
|
static const String operationsBoxName = 'operations';
|
|
static const String sectorsBoxName = 'sectors';
|
|
static const String passagesBoxName = 'passages';
|
|
static const String settingsBoxName = 'settings';
|
|
static const String membresBoxName = 'membres';
|
|
static const String userSectorBoxName = 'user_sector';
|
|
static const String chatConversationsBoxName = 'chat_conversations';
|
|
static const String chatMessagesBoxName = 'chat_messages';
|
|
static const String regionsBoxName = 'regions';
|
|
|
|
// Rôles utilisateurs
|
|
static const int roleUser = 1;
|
|
static const int roleAdmin1 = 2;
|
|
static const int roleAdmin2 = 4;
|
|
static const int roleAdmin3 = 9;
|
|
|
|
// URLs API pour les différents environnements
|
|
static const String baseApiUrlDev = 'https://dapp.geosector.fr/api';
|
|
static const String baseApiUrlRec = 'https://rapp.geosector.fr/api';
|
|
static const String baseApiUrlProd = 'https://app.geosector.fr/api';
|
|
|
|
// Identifiants d'application pour les différents environnements
|
|
static const String appIdentifierDev = 'dapp.geosector.fr';
|
|
static const String appIdentifierRec = 'rapp.geosector.fr';
|
|
static const String appIdentifierProd = 'app.geosector.fr';
|
|
|
|
// Endpoints API
|
|
static const String loginEndpoint = '/login';
|
|
static const String logoutEndpoint = '/logout';
|
|
static const String registerEndpoint = '/register';
|
|
static const String syncDataEndpoint = '/data/sync';
|
|
static const String sectorsEndpoint = '/sectors';
|
|
|
|
// Durées
|
|
static const Duration connectionTimeout = Duration(seconds: 5);
|
|
static const Duration receiveTimeout = Duration(seconds: 30);
|
|
static const Duration sessionDefaultExpiry = Duration(days: 7);
|
|
|
|
// Clés API externes
|
|
static const String mapboxApiKeyDev =
|
|
'pk.eyJ1IjoicHZkNnNvZnQiLCJhIjoiY21hanVmNjN5MTM5djJtczdsMW92cjQ0ciJ9.pUCMuvWPB3cuBaPh4ywTAw';
|
|
static const String mapboxApiKeyRec =
|
|
'pk.eyJ1IjoicHZkNnNvZnQiLCJhIjoiY21hanVlZ3FiMGx0NDJpc2k4YnkxaWZ2dSJ9.OqGJtjlWRgB4fIjECCB8WA';
|
|
static const String mapboxApiKeyProd =
|
|
'pk.eyJ1IjoicHZkNnNvZnQiLCJhIjoiY204dTNhNmd0MGV1ZzJqc2pnNnB0NjYxdSJ9.TA5Mvliyn91Oi01F_2Yuxw';
|
|
|
|
// Méthode pour obtenir la clé API Mapbox en fonction de l'environnement actuel
|
|
static String getMapboxApiKey(String environment) {
|
|
// Utiliser l'environnement passé en paramètre pour déterminer quelle clé retourner
|
|
switch (environment) {
|
|
case 'DEV':
|
|
return mapboxApiKeyDev;
|
|
case 'REC':
|
|
return mapboxApiKeyRec;
|
|
case 'PROD':
|
|
default:
|
|
return mapboxApiKeyProd;
|
|
}
|
|
}
|
|
|
|
// Pour la compatibilité avec le code existant, on garde un getter qui utilise
|
|
// l'environnement actuel (à utiliser uniquement si l'ApiService n'est pas disponible)
|
|
static String get mapboxApiKey {
|
|
// Note: Cette implémentation est une solution de secours et devrait être évitée
|
|
// Il est préférable d'utiliser getMapboxApiKey(apiService.getCurrentEnvironment())
|
|
|
|
// Détection basique de l'environnement basée sur l'URL en mode web
|
|
if (kIsWeb) {
|
|
// Essayer d'accéder à l'URL actuelle (fonctionne uniquement en mode web)
|
|
try {
|
|
final String currentUrl = Uri.base.toString().toLowerCase();
|
|
|
|
if (currentUrl.contains('dapp.geosector.fr')) {
|
|
return mapboxApiKeyDev;
|
|
} else if (currentUrl.contains('rapp.geosector.fr')) {
|
|
return mapboxApiKeyRec;
|
|
}
|
|
} catch (e) {
|
|
// En cas d'erreur, utiliser la clé de production par défaut
|
|
print('Erreur lors de la détection de l\'environnement: $e');
|
|
}
|
|
}
|
|
|
|
// Par défaut, retourner la clé de production
|
|
return mapboxApiKeyProd;
|
|
}
|
|
|
|
// Headers
|
|
static const String sessionHeader = 'Authorization';
|
|
|
|
// En-têtes par défaut pour les requêtes API
|
|
// Note: Ces en-têtes seront complétés dynamiquement dans ApiService
|
|
static const Map<String, String> defaultHeaders = {
|
|
'Content-Type': 'application/json',
|
|
'X-Client-Type': kIsWeb ? 'web' : 'mobile',
|
|
'Accept': 'application/json',
|
|
};
|
|
|
|
// Civilités
|
|
static const Map<int, String> civilites = {
|
|
1: 'M.',
|
|
2: 'Mme',
|
|
};
|
|
|
|
// Types de règlements (basés sur la maquette Figma)
|
|
static const Map<int, Map<String, dynamic>> typesReglements = {
|
|
0: {
|
|
'titre': 'Pas de règlement',
|
|
'couleur': 0xFF757575, // Gris foncé
|
|
'icon_data': Icons.money_off,
|
|
},
|
|
1: {
|
|
'titre': 'Espèce',
|
|
'couleur': 0xFFB87333, // Couleur cuivrée
|
|
'icon_data': Icons.payments_outlined,
|
|
},
|
|
2: {
|
|
'titre': 'Chèque',
|
|
'couleur': 0xFFD8D5EC, // Violet clair (Figma)
|
|
'icon_data': Icons.account_balance_wallet_outlined,
|
|
},
|
|
3: {
|
|
'titre': 'CB',
|
|
'couleur': 0xFF0099FF, // Bleu flashy
|
|
'icon_data': Icons.credit_card,
|
|
},
|
|
};
|
|
|
|
// Types de passages (basés sur la maquette Figma)
|
|
static const Map<int, Map<String, dynamic>> typesPassages = {
|
|
1: {
|
|
'titres': 'Effectués',
|
|
'titre': 'Effectué',
|
|
'couleur1': 0xFF00E09D, // Vert (Figma)
|
|
'couleur2': 0xFF00E09D, // Vert (Figma)
|
|
'couleur3': 0xFF00E09D, // Vert (Figma)
|
|
'icon_data': Icons.task_alt,
|
|
},
|
|
2: {
|
|
'titres': 'À finaliser',
|
|
'titre': 'À finaliser',
|
|
'couleur1': 0xFFFFFFFF, // Blanc
|
|
'couleur2': 0xFFF7A278, // Orange (Figma)
|
|
'couleur3': 0xFFE65100, // Orange foncé
|
|
'icon_data': Icons.refresh,
|
|
},
|
|
3: {
|
|
'titres': 'Refusés',
|
|
'titre': 'Refusé',
|
|
'couleur1': 0xFFE41B13, // Rouge (Figma)
|
|
'couleur2': 0xFFE41B13, // Rouge (Figma)
|
|
'couleur3': 0xFFE41B13, // Rouge (Figma)
|
|
'icon_data': Icons.block,
|
|
},
|
|
4: {
|
|
'titres': 'Dons',
|
|
'titre': 'Don',
|
|
'couleur1': 0xFF395AA7, // Bleu (Figma)
|
|
'couleur2': 0xFF395AA7, // Bleu (Figma)
|
|
'couleur3': 0xFF395AA7, // Bleu (Figma)
|
|
'icon_data': Icons.volunteer_activism,
|
|
},
|
|
5: {
|
|
'titres': 'Lots',
|
|
'titre': 'Lot',
|
|
'couleur1': 0xFF20335E, // Bleu foncé (Figma)
|
|
'couleur2': 0xFF20335E, // Bleu foncé (Figma)
|
|
'couleur3': 0xFF20335E, // Bleu foncé (Figma)
|
|
'icon_data': Icons.layers,
|
|
},
|
|
6: {
|
|
'titres': 'Maisons vides',
|
|
'titre': 'Maison vide',
|
|
'couleur1': 0xFFB8B8B8, // Gris (Figma)
|
|
'couleur2': 0xFFB8B8B8, // Gris (Figma)
|
|
'couleur3': 0xFFB8B8B8, // Gris (Figma)
|
|
'icon_data': Icons.home_outlined,
|
|
},
|
|
};
|
|
}
|