Voici une version de cette application d'urgence développée avec Flutter :
```dart
import 'package:flutter/[Link]';
void main() => runApp(EmergencyApp());
class EmergencyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Emergency Connect',
theme: ThemeData(
primarySwatch: [Link],
visualDensity: [Link],
),
home: HomeScreen(),
);
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateMixin {
late TabController _tabController;
final List<EmergencyGroup> _groups = [];
final List<EmergencyMessage> _messages = [];
@override
void initState() {
[Link]();
_tabController = TabController(length: 3, vsync: this);
void _sendEmergencyAlert() {
final newMessage = EmergencyMessage(
content: '🚨 ALERTE URGENTE! J\'ai besoin d\'aide immédiate!',
group: 'urgence-générale',
timestamp: [Link](),
);
setState(() {
_messages.add(newMessage);
});
[Link](context).showSnackBar(
SnackBar(
content: Text('Alerte envoyée à tous les contacts!'),
duration: Duration(seconds: 2),
),
);
void _createNewGroup() async {
final TextEditingController nameController = TextEditingController();
bool isPrivate = true;
await showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Créer un groupe'),
content: Column(
mainAxisSize: [Link],
children: [
TextField(
controller: nameController,
decoration: InputDecoration(labelText: 'Nom du groupe'),
),
SwitchListTile(
title: Text('Groupe privé'),
value: isPrivate,
onChanged: (value) => isPrivate = value,
),
],
),
actions: [
TextButton(
onPressed: () => [Link](context),
child: Text('Annuler'),
),
ElevatedButton(
onPressed: () {
if ([Link]) {
setState(() {
_groups.add(EmergencyGroup(
name: [Link],
isPrivate: isPrivate,
members: ['Moi', 'Contact 1', 'Contact 2'],
));
});
[Link](context);
},
child: Text('Créer'),
),
],
),
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Emergency Connect'),
bottom: TabBar(
controller: _tabController,
tabs: [
Tab(icon: Icon([Link]), text: 'Urgence'),
Tab(icon: Icon([Link]), text: 'Groupes'),
Tab(icon: Icon([Link]), text: 'Messages'),
],
),
),
body: TabBarView(
controller: _tabController,
children: [
_buildEmergencyTab(),
_buildGroupsTab(),
_buildMessagesTab(),
],
),
);
Widget _buildEmergencyTab() {
return Column(
children: [
SizedBox(height: 20),
[Link](
icon: Icon([Link], size: 30),
label: Text('ALERTE GÉNÉRALE', style: TextStyle(fontSize: 20)),
style: [Link](
primary: [Link],
padding: [Link](vertical: 20, horizontal: 30),
),
onPressed: _sendEmergencyAlert,
),
SizedBox(height: 20),
Expanded(
child: ListView(
children: [
ListTile(
leading: Icon([Link]),
title: Text('Contact d\'urgence 1'),
subtitle: Text('Dernière connexion: il y a 2 min'),
),
ListTile(
leading: Icon([Link]),
title: Text('Contact d\'urgence 2'),
subtitle: Text('En ligne'),
),
],
),
),
],
);
Widget _buildGroupsTab() {
return Column(
children: [
Padding(
padding: [Link](16.0),
child: ElevatedButton(
onPressed: _createNewGroup,
child: Text('Créer un nouveau groupe'),
),
),
Expanded(
child: [Link](
itemCount: _groups.length,
itemBuilder: (context, index) => Card(
child: ListTile(
leading: Icon(_groups[index].isPrivate ? [Link] : [Link]),
title: Text(_groups[index].name),
subtitle: Text('Membres: ${_groups[index].[Link](', ')}'),
),
),
),
),
],
);
Widget _buildMessagesTab() {
return [Link](
reverse: true,
itemCount: _messages.length,
itemBuilder: (context, index) {
final message = _messages.[Link]()[index];
return Card(
child: ListTile(
leading: Icon([Link], color: [Link]),
title: Text([Link]),
subtitle: Text('${_formatTime([Link])} - ${[Link]}'),
),
);
},
);
String _formatTime(DateTime date) {
return '${[Link]}:${[Link]().padLeft(2, '0')}';
class EmergencyGroup {
final String name;
final bool isPrivate;
final List<String> members;
EmergencyGroup({
required [Link],
required [Link],
required [Link],
});
class EmergencyMessage {
final String content;
final String group;
final DateTime timestamp;
EmergencyMessage({
required [Link],
required [Link],
required [Link],
});
```
Cette version Flutter inclut :
1. **Structure principale** :
- Système d'onglets avec TabBar
- Design Material moderne
- Gestion d'état avec setState
2. **Fonctionnalités** :
- Bouton d'alerte d'urgence avec confirmation
- Création de groupes (publics/privés)
- Liste des messages d'urgence avec horodatage
- Liste des contacts d'urgence
- Interface responsive
3. **Composants clés** :
- Dialogues de création de groupe
- Cartes interactives pour les groupes
- Liste des messages inversée (plus récents en premier)
- Design cohérent avec les bonnes pratiques Material Design
Pour améliorer cette application, vous pourriez :
1. Ajouter une base de données locale avec Hive ou SQLite
2. Implémenter l'authentification avec Firebase
3. Ajouter des notifications push
4. Intégrer la géolocalisation
5. Ajouter des appels vocaux/VoIP
6. Implémenter le chiffrement des messages
Exécutez l'application avec :
```bash
flutter run
```
Assurez-vous d'ajouter les dépendances nécessaires dans `[Link]` selon les fonctionnalités que
vous ajouterez.