Files
geo/app/lib/core/constants/app_keys.dart
pierre 2f5946a184 feat: Version 3.5.2 - Configuration Stripe et gestion des immeubles
- Configuration complète Stripe pour les 3 environnements (DEV/REC/PROD)
  * DEV: Clés TEST Pierre (mode test)
  * REC: Clés TEST Client (mode test)
  * PROD: Clés LIVE Client (mode live)
- Ajout de la gestion des bases de données immeubles/bâtiments
  * Configuration buildings_database pour DEV/REC/PROD
  * Service BuildingService pour enrichissement des adresses
- Optimisations pages et améliorations ergonomie
- Mises à jour des dépendances Composer
- Nettoyage des fichiers obsolètes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:26:27 +01:00

196 lines
7.0 KiB
Dart
Executable File

/// 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
library;
import 'package:flutter/foundation.dart' show kIsWeb, debugPrint;
import 'package:flutter/material.dart';
class AppKeys {
// Noms des boîtes Hive
static const String userBoxName = 'user';
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 chatRoomsBoxName = 'chat_rooms';
static const String chatMessagesBoxName = 'chat_messages';
static const String regionsBoxName = 'regions';
static const String pendingRequestsBoxName = 'pending_requests';
static const String tempEntitiesBoxName = 'temp_entities';
// 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://app3.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 = 'app3.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: 15);
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('app.geo.dev')) {
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
debugPrint('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 = {
1: {
'titre': 'Espèce',
'couleur': 0xFFDAA520, // Goldenrod
'icon_data': Icons.payments_outlined,
},
2: {
'titre': 'Chèque',
'couleur': 0xFF7E57C2, // Violet foncé (Material Design Deep Purple 400)
'icon_data': Icons.account_balance_wallet_outlined,
},
3: {
'titre': 'CB',
'couleur': 0xFF0099FF, // Bleu flashy
'icon_data': Icons.credit_card,
},
4: {
'titre': 'Non renseigné',
'couleur': 0xFF9E9E9E, // Gris moyen
'icon_data': Icons.help_outline,
},
};
// 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 (nbPassages=0)
'couleur2': 0xFFFFB978, // Orange moyen (nbPassages=1)
'couleur3': 0xFFE66F00, // Orange foncé (nbPassages>1)
'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': 0xFF757575, // Gris foncé (Material Design 600)
'couleur2': 0xFF757575, // Gris foncé (Material Design 600)
'couleur3': 0xFF757575, // Gris foncé (Material Design 600)
'icon_data': Icons.home_outlined,
},
};
}