- 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>
81 lines
2.0 KiB
Dart
Executable File
81 lines
2.0 KiB
Dart
Executable File
import 'package:flutter/material.dart';
|
|
|
|
/// Écran principal d'une conversation
|
|
///
|
|
/// Ce widget affiche une conversation complète avec :
|
|
/// - Liste des messages
|
|
/// - Zone de saisie
|
|
/// - En-tête et pied de page personnalisables
|
|
|
|
class ChatScreen extends StatefulWidget {
|
|
final String conversationId;
|
|
final String? title;
|
|
final Widget? header;
|
|
final Widget? footer;
|
|
final bool enableAttachments;
|
|
final bool showTypingIndicator;
|
|
final bool enableReadReceipts;
|
|
final bool isAnnouncement;
|
|
final bool canReply;
|
|
|
|
const ChatScreen({
|
|
super.key,
|
|
required this.conversationId,
|
|
this.title,
|
|
this.header,
|
|
this.footer,
|
|
this.enableAttachments = true,
|
|
this.showTypingIndicator = true,
|
|
this.enableReadReceipts = true,
|
|
this.isAnnouncement = false,
|
|
this.canReply = true,
|
|
});
|
|
|
|
@override
|
|
State<ChatScreen> createState() => _ChatScreenState();
|
|
}
|
|
|
|
class _ChatScreenState extends State<ChatScreen> {
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
// TODO: Initialiser les données du chat
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text(widget.title ?? 'Chat'),
|
|
// TODO: Ajouter les actions de l'AppBar
|
|
),
|
|
body: Column(
|
|
children: [
|
|
if (widget.header != null) widget.header!,
|
|
Expanded(
|
|
child: Container(
|
|
// TODO: Implémenter la liste des messages
|
|
child: const Center(child: Text('Messages à venir...')),
|
|
),
|
|
),
|
|
if (widget.footer != null) widget.footer!,
|
|
if (widget.canReply)
|
|
Container(
|
|
// TODO: Implémenter la zone de saisie
|
|
child: const Padding(
|
|
padding: EdgeInsets.all(8.0),
|
|
child: Text('Zone de saisie à venir...'),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
// TODO: Libérer les ressources
|
|
super.dispose();
|
|
}
|
|
}
|