Files
geo/app/lib/chat/chat_module.dart

83 lines
2.4 KiB
Dart
Executable File

import 'package:flutter/material.dart';
import 'services/chat_service.dart';
import 'pages/rooms_page.dart';
import 'pages/chat_page.dart';
/// Module de chat autonome avec gestion des rôles
///
/// Les permissions sont gérées via le fichier chat_config.yaml
class ChatModule {
static bool _isInitialized = false;
/// Initialiser le module chat avec support des rôles
///
/// @param apiUrl URL de base de l'API
/// @param userId ID de l'utilisateur connecté
/// @param userName Nom de l'utilisateur
/// @param userRole Rôle de l'utilisateur (1: membre, 2: admin amicale, 9: superadmin)
/// @param userEntite ID de l'entité/amicale de l'utilisateur (optionnel)
/// @param authToken Token JWT d'authentification (optionnel)
static Future<void> init({
required String apiUrl,
required int userId,
required String userName,
required int userRole,
int? userEntite,
String? authToken,
}) async {
// Si déjà initialisé, on ne fait rien (évite les réinitialisations)
if (_isInitialized) {
debugPrint('ChatModule already initialized, skipping...');
return;
}
await ChatService.init(
apiUrl: apiUrl,
userId: userId,
userName: userName,
userRole: userRole,
userEntite: userEntite,
authToken: authToken,
);
_isInitialized = true;
}
/// Obtenir la page de liste des conversations
static Widget getRoomsPage() => const RoomsPage();
/// Obtenir la page de chat pour une room spécifique
static Widget getChatPage(String roomId, String roomTitle) => ChatPage(
roomId: roomId,
roomTitle: roomTitle,
);
/// Naviguer vers le chat depuis n'importe où
static void openChat(BuildContext context) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => const RoomsPage(),
),
);
}
/// Nettoyer les ressources (alias pour cleanup)
static void dispose() {
cleanup();
}
/// Nettoyer les ressources du module chat (à appeler lors du logout)
static void cleanup() {
if (_isInitialized) {
try {
ChatService.instance.dispose();
} catch (e) {
// Ignorer les erreurs si le service n'est pas initialisé
debugPrint('⚠️ Erreur lors du cleanup du chat: $e');
}
_isInitialized = false;
}
}
/// Vérifier si le module est initialisé
static bool get isInitialized => _isInitialized;
}