- Ajout système complet de gestion des secteurs avec contours géographiques - Import des contours départementaux depuis GeoJSON - API REST pour la gestion des secteurs (/api/sectors) - Service de géolocalisation pour déterminer les secteurs - Migration base de données avec tables x_departements_contours et sectors_adresses - Interface Flutter pour visualisation et gestion des secteurs - Ajout thème sombre dans l'application - Corrections diverses et optimisations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
167 lines
4.9 KiB
Dart
Executable File
167 lines
4.9 KiB
Dart
Executable File
import 'package:flutter/material.dart';
|
|
import '../chat.dart';
|
|
|
|
/// Exemple d'intégration du service MQTT dans l'application
|
|
///
|
|
/// Montre comment initialiser et utiliser le service de notifications MQTT
|
|
|
|
class MqttIntegrationExample extends StatefulWidget {
|
|
const MqttIntegrationExample({super.key});
|
|
|
|
@override
|
|
State<MqttIntegrationExample> createState() => _MqttIntegrationExampleState();
|
|
}
|
|
|
|
class _MqttIntegrationExampleState extends State<MqttIntegrationExample> {
|
|
late final MqttNotificationService _notificationService;
|
|
bool _isInitialized = false;
|
|
String _status = 'Non initialisé';
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_initializeMqttService();
|
|
}
|
|
|
|
Future<void> _initializeMqttService() async {
|
|
try {
|
|
// Initialiser le service avec la configuration
|
|
_notificationService = MqttNotificationService(
|
|
mqttHost: MqttConfig.host,
|
|
mqttPort: MqttConfig.port,
|
|
mqttUsername: MqttConfig.username,
|
|
mqttPassword: MqttConfig.password,
|
|
);
|
|
|
|
// Configurer les callbacks
|
|
_notificationService.onMessageTap = (messageId) {
|
|
debugPrint('Notification tapée : $messageId');
|
|
// Naviguer vers la conversation correspondante
|
|
_navigateToMessage(messageId);
|
|
};
|
|
|
|
_notificationService.onNotificationReceived = (data) {
|
|
debugPrint('Notification reçue : $data');
|
|
setState(() {
|
|
_status = 'Notification reçue : ${data['content']}';
|
|
});
|
|
};
|
|
|
|
// Initialiser avec l'ID utilisateur (récupéré du UserRepository)
|
|
final userId = _getCurrentUserId(); // À implémenter selon votre logique
|
|
await _notificationService.initialize(userId: userId);
|
|
|
|
setState(() {
|
|
_isInitialized = true;
|
|
_status = 'Service MQTT initialisé';
|
|
});
|
|
} catch (e) {
|
|
setState(() {
|
|
_status = 'Erreur : $e';
|
|
});
|
|
}
|
|
}
|
|
|
|
String _getCurrentUserId() {
|
|
// Dans votre application réelle, vous récupéreriez l'ID utilisateur
|
|
// depuis le UserRepository ou le contexte de l'application
|
|
return '123'; // Exemple
|
|
}
|
|
|
|
void _navigateToMessage(String messageId) {
|
|
// Implémenter la navigation vers le message
|
|
// Par exemple :
|
|
// Navigator.push(context, MaterialPageRoute(
|
|
// builder: (_) => ChatScreen(messageId: messageId),
|
|
// ));
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
_notificationService.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text('Test MQTT Notifications'),
|
|
),
|
|
body: Center(
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Text(
|
|
_status,
|
|
style: Theme.of(context).textTheme.headlineSmall,
|
|
textAlign: TextAlign.center,
|
|
),
|
|
const SizedBox(height: 20),
|
|
if (_isInitialized) ...[
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
_notificationService.pauseNotifications();
|
|
setState(() {
|
|
_status = 'Notifications en pause';
|
|
});
|
|
},
|
|
child: const Text('Pause Notifications'),
|
|
),
|
|
const SizedBox(height: 10),
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
_notificationService.resumeNotifications();
|
|
setState(() {
|
|
_status = 'Notifications actives';
|
|
});
|
|
},
|
|
child: const Text('Reprendre Notifications'),
|
|
),
|
|
const SizedBox(height: 10),
|
|
ElevatedButton(
|
|
onPressed: () async {
|
|
// Exemple de test en publiant un message
|
|
await _notificationService.publishMessage(
|
|
'chat/user/${_getCurrentUserId()}/messages',
|
|
{
|
|
'type': 'chat_message',
|
|
'messageId':
|
|
'test_${DateTime.now().millisecondsSinceEpoch}',
|
|
'content': 'Message de test',
|
|
'senderId': '999',
|
|
'senderName': 'Système',
|
|
},
|
|
);
|
|
setState(() {
|
|
_status = 'Message test envoyé';
|
|
});
|
|
},
|
|
child: const Text('Envoyer Message Test'),
|
|
),
|
|
] else ...[
|
|
const CircularProgressIndicator(),
|
|
],
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
/// Exemple d'intégration dans le main.dart de votre application
|
|
void mainExample() {
|
|
runApp(const MyApp());
|
|
}
|
|
|
|
class MyApp extends StatelessWidget {
|
|
const MyApp({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return const MaterialApp(
|
|
home: MqttIntegrationExample(),
|
|
);
|
|
}
|
|
}
|