83 lines
2.4 KiB
Dart
Executable File
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;
|
|
} |