analyse moi ce code = import 'dart:io';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:file_picker/file_picker.dart';

// Classe représentant un élève
class Eleve {
  String nom;
  String prenom;
  String dateNaissance;
  String lieuNaissance;
  String? tel;
  String telParents;

  Eleve({
    required this.nom,
    required this.prenom,
    required this.dateNaissance,
    required this.lieuNaissance,
    this.tel,
    required this.telParents,
  });

  // Méthode pour créer une instance d'Eleve à partir d'une Map
  factory Eleve.fromMap(Map<String, dynamic> map) {
    return Eleve(
      nom: map['nom'],
      prenom: map['prenom'],
      dateNaissance: map['date_naissance'],
      lieuNaissance: map['lieu_naissance'],
      tel: map['tel'],
      telParents: map['tel_parents'],
    );
  }

  // Méthode pour convertir une instance d'Eleve en Map
  Map<String, dynamic> toMap() {
    return {
      'nom': nom,
      'prenom': prenom,
      'date_naissance': dateNaissance,
      'lieu_naissance': lieuNaissance,
      'tel': tel,
      'tel_parents': telParents,
    };
  }
}

// Classe représentant un professeur
class Professeur {
  String nom;
  String prenom;
  String dateNaissance;
  String matiere;
  String lieuResidence;
  String coordonnees;
  String genre;
  String? imagePath;
  Map<String, Map<String, String?>> emploiDuTemps;

  Professeur({
    required this.nom,
    required this.prenom,
    required this.dateNaissance,
    required this.matiere,
    required this.lieuResidence,
    required this.coordonnees,
    required this.genre,
    this.imagePath,
    required this.emploiDuTemps,
  });

  // Méthode pour créer une instance de Professeur à partir d'une Map
  factory Professeur.fromMap(Map<String, dynamic> map) {
    // Convertir l'emploi du temps de Map<dynamic, dynamic> en Map<String, Map<String, String?>>
    Map<String, Map<String, String?>> emploiDuTemps = {};
    if (map['emploi_du_temps'] != null) {
      map['emploi_du_temps'].forEach((key, value) {
        emploiDuTemps[key] = Map<String, String?>.from(value);
      });
    }

    return Professeur(
      nom: map['nom'],
      prenom: map['prenom'],
      dateNaissance: map['date_naissance'],
      matiere: map['matiere'],
      lieuResidence: map['lieu_residence'],
      coordonnees: map['coordonnees'],
      genre: map['genre'],
      imagePath: map['image_path'],
      emploiDuTemps: emploiDuTemps,
    );
  }

  // Méthode pour convertir une instance de Professeur en Map
  Map<String, dynamic> toMap() {
    return {
      'nom': nom,
      'prenom': prenom,
      'date_naissance': dateNaissance,
      'matiere': matiere,
      'lieu_residence': lieuResidence,
      'coordonnees': coordonnees,
      'genre': genre,
      'image_path': imagePath,
      'emploi_du_temps': emploiDuTemps,
    };
  }
}

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  //const MyApp({Key? key}) : super(key: key);
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Gestion d'établissement scolaire",
      theme: ThemeData(
        primarySwatch: Colors.indigo,
      ),
      home: const GestionEcole(),
    );
  }
}

class GestionEcole extends StatefulWidget {

  const GestionEcole({super.key});

  @override
  GestionEcoleState createState() => GestionEcoleState();
}

class GestionEcoleState extends State<GestionEcole> {
  int _selectedIndex = 0;
  bool _isDarkMode = false;

  List<String> classes = [];
  Map<String, List<Eleve>> eleves = {};
  List<Professeur> professeurs = [];
  Map<String, Map<String, dynamic>> notes = {};

  final _formKeyEleve = GlobalKey<FormState>();
  final _formKeyProfesseur = GlobalKey<FormState>();
  final _formKeyClasse = GlobalKey<FormState>();

  final _nomEleveController = TextEditingController();
  final _prenomEleveController = TextEditingController();
  final _dateNaissanceEleveController = TextEditingController();
  final _lieuNaissanceEleveController = TextEditingController();
  final _telEleveController = TextEditingController();
  final _telParentsEleveController = TextEditingController();
  String? _classeEleveSelectionnee;

  final _nomProfesseurController = TextEditingController();
  final _prenomProfesseurController = TextEditingController();
  final _dateNaissanceProfesseurController = TextEditingController();
  final _matiereProfesseurController = TextEditingController();
  final _lieuResidenceProfesseurController = TextEditingController();
  final _coordonneesProfesseurController = TextEditingController();
  String? _genreProfesseurSelectionne;
  String? _imagePathProfesseur;

  String? _methodeCalcul = 'toutes';
  final _nomMatiereController = TextEditingController();
  final _coefMatiereController = TextEditingController();

  Map<String, Map<String, String?>> emploiDuTemps = {};

  @override
  void initState() {
    super.initState();
    // Initialisation de l'emploi du temps (vide par défaut)
    for (String heure in [
      "8h-10h",
      "10h-12h",
      "12h-14h",
      "14h-16h",
      "16h-18h"
    ]) {
      emploiDuTemps[heure] = {
        "Lundi    ": null,
        "Mardi   ": null,
        "Mercredi ": null,
        "Jeudi  ": null,
        "Vendredi": null,
        "Samedi ": null,
      };
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Gestion d'établissement scolaire"),
        actions: [
          IconButton(
            icon: Icon(_isDarkMode ? Icons.light_mode : Icons.dark_mode),
            onPressed: () {
              setState(() {
                _isDarkMode = !_isDarkMode;
              });
            },
          ),
        ],
      ),
      drawer: Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: <Widget>[
            const DrawerHeader(
              decoration: BoxDecoration(
                color: Colors.indigo,
              ),
              child: Text(
                "Menu",
                style: TextStyle(
                  color: Colors.white,
                  fontSize: 24,
                ),
              ),
            ),
            ListTile(
              leading: const Icon(Icons.dashboard),
              title: const Text("Tableau de bord"),
              onTap: () {
                setState(() {
                  _selectedIndex = 0;
                });
                Navigator.pop(context); // Fermer le tiroir
              },
            ),
            ListTile(
              leading: const Icon(Icons.person_add),
              title: const Text("Inscription Elève"),
              onTap: () {
                setState(() {
                  _selectedIndex = 1;
                });
                Navigator.pop(context);
              },
            ),
            ListTile(
              leading: const Icon(Icons.people),
              title: const Text("Gestion des élèves"),
              onTap: () {
                setState(() {
                  _selectedIndex = 2;
                });
                Navigator.pop(context);
              },
            ),
            ListTile(
              leading: const Icon(Icons.class_),
              title: const Text("Gestion des classes"),
              onTap: () {
                setState(() {
                  _selectedIndex = 3;
                });
                Navigator.pop(context);
              },
            ),
            const Divider(),
            ListTile(
              leading: const Icon(Icons.person_add),
              title: const Text("Inscription Professeur"),
              onTap: () {
                setState(() {
                  _selectedIndex = 4;
                });
                Navigator.pop(context);
              },
            ),
            ListTile(
              leading: const Icon(Icons.school),
              title: const Text("Gestion des Professeurs"),
              onTap: () {
                setState(() {
                  _selectedIndex = 5;
                });
                Navigator.pop(context);
              },
            ),
            const Divider(),
            ListTile(
              leading: const Icon(Icons.edit_note),
              title: const Text("Ajout de notes"),
              onTap: () {
                setState(() {
                  _selectedIndex = 6;
                });
                Navigator.pop(context);
              },
            ),
            ListTile(
              leading: const Icon(Icons.calculate),
              title: const Text("Calcul de moyenne"),
              onTap: () {
                setState(() {
                  _selectedIndex = 7;
                });
                Navigator.pop(context);
              },
            ),
          ],
        ),
      ),
      body: _selectedIndex == 0
          ? _buildDashboard()
          : _selectedIndex == 1
              ? _buildInscriptionEleve()
              : _selectedIndex == 2
                  ? _buildGestionEleves()
                  : _selectedIndex == 3
                      ? _buildGestionClasses()
                      : _selectedIndex == 4
                          ? _buildInscriptionProfesseur()
                          : _selectedIndex == 5
                              ? _buildGestionProfesseurs()
                              : _selectedIndex == 6
                                  ? _buildAjoutNotes()
                                  : _buildCalculMoyenne(),
    );
  }

  Widget _buildDashboard() {
    int totalEleves = 0;
    eleves.forEach((_, listEleves) {
      totalEleves += listEleves.length;
    });

    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          const Text(
            "Tableau de bord",
            style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 20),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              _buildInfoCard(
                  "Total des élèves", totalEleves.toString(), Icons.people),
              _buildInfoCard(
                  "Nombre de classes", classes.length.toString(), Icons.class_),
              _buildInfoCard("Nombre de professeurs",
                  professeurs.length.toString(), Icons.school),
            ],
          ),
        ],
      ),
    );
  }

  Widget _buildInfoCard(String title, String value, IconData icon) {
    return Card(
      elevation: 5,
      child: Container(
        width: 150,
        padding: const EdgeInsets.all(20),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Icon(icon, size: 40),
            const SizedBox(height: 10),
            Text(
              title,
              textAlign: TextAlign.center,
              style: const TextStyle(fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 5),
            Text(
              value,
              style: const TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }

  Widget _buildInscriptionEleve() {
    return SingleChildScrollView(
      padding: const EdgeInsets.all(16.0),
      child: Form(
        key: _formKeyEleve,
        child: Column(
          children: <Widget>[
            const Text(
              "Inscription d'un nouvel élève",
              style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 20),
            TextFormField(
              controller: _nomEleveController,
              decoration: const InputDecoration(
                labelText: 'Nom',
                border: OutlineInputBorder(),
              ),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Veuillez entrer le nom de l\'élève';
                }
                return null;
              },
            ),
            const SizedBox(height: 16),
            TextFormField(
              controller: _prenomEleveController,
              decoration: const InputDecoration(
                labelText: 'Prénom',
                border: OutlineInputBorder(),
              ),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Veuillez entrer le prénom de l\'élève';
                }
                return null;
              },
            ),
            const SizedBox(height: 16),
            TextFormField(
              controller: _dateNaissanceEleveController,
              decoration: const InputDecoration(
                labelText: 'Date de naissance (JJ/MM/AAAA)',
                border: OutlineInputBorder(),
              ),
              onTap: () async {
                DateTime? pickedDate = await showDatePicker(
                  context: context,
                  initialDate: DateTime.now(),
                  firstDate: DateTime(1900),
                  lastDate: DateTime.now(),
                );

                if (pickedDate != null) {
                  String formattedDate =
                      DateFormat('dd/MM/yyyy').format(pickedDate);
                  setState(() {
                    _dateNaissanceEleveController.text = formattedDate;
                  });
                }
              },
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Veuillez entrer la date de naissance';
                }
                // Vous pouvez ajouter une validation de format de date ici
                return null;
              },
            ),
            const SizedBox(height: 16),
            TextFormField(
              controller: _lieuNaissanceEleveController,
              decoration: const InputDecoration(
                labelText: 'Lieu de naissance',
                border: OutlineInputBorder(),
              ),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Veuillez entrer le lieu de naissance';
                }
                return null;
              },
            ),
            const SizedBox(height: 16),
            TextFormField(
              controller: _telEleveController,
              decoration: const InputDecoration(
                labelText: 'Numéro de téléphone (Optionnel)',
                border: OutlineInputBorder(),
              ),
            ),
            const SizedBox(height: 16),
            TextFormField(
              controller: _telParentsEleveController,
              decoration: const InputDecoration(
                labelText: 'Numéro des parents *',
                border: OutlineInputBorder(),
              ),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Veuillez entrer le numéro des parents';
                }
                return null;
              },
            ),
            const SizedBox(height: 16),
            DropdownButtonFormField<String>(
              value: _classeEleveSelectionnee,
              decoration: const InputDecoration(
                labelText: 'Classe',
                border: OutlineInputBorder(),
              ),
              items: classes.map((String classe) {
                return DropdownMenuItem<String>(
                  value: classe,
                  child: Text(classe),
                );
              }).toList(),
              onChanged: (String? newValue) {
                setState(() {
                  _classeEleveSelectionnee = newValue;
                });
              },
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Veuillez sélectionner une classe';
                }
                return null;
              },
            ),
            const SizedBox(height: 32),
            ElevatedButton(
              onPressed: () {
                if (_formKeyEleve.currentState!.validate()) {
                  _inscrireEleve();
                }
              },
              child: const Text('Inscrire'),
            ),
          ],
        ),
      ),
    );
  }

  void _inscrireEleve() {
    String nom = _nomEleveController.text;
    String prenom = _prenomEleveController.text;
    String dateNaissance = _dateNaissanceEleveController.text;
    String lieuNaissance = _lieuNaissanceEleveController.text;
    String? tel = _telEleveController.text;
    String telParents = _telParentsEleveController.text;
    String classe = _classeEleveSelectionnee!;

    if (tel.isEmpty) {
      tel = null; // Définir tel à null si la chaîne est vide
    }

    // Créer un nouvel objet Eleve
    Eleve nouvelEleve = Eleve(
      nom: nom,
      prenom: prenom,
      dateNaissance: dateNaissance,
      lieuNaissance: lieuNaissance,
      tel: tel,
      telParents: telParents,
    );

    setState(() {
      if (eleves.containsKey(classe)) {
        eleves[classe]!.add(nouvelEleve);
      } else {
        eleves[classe] = [nouvelEleve];
      }
      _formKeyEleve.currentState!.reset();
      _classeEleveSelectionnee = null;
      _afficherMessage('Élève inscrit avec succès!');
    });
  }

  Widget _buildGestionEleves() {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text(
            'Gestion des élèves',
            style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 16),
          DropdownButton<String>(
            value: _classeEleveSelectionnee,
            hint: const Text('Sélectionnez une classe'),
            items: classes.map((String classe) {
              return DropdownMenuItem<String>(
                value: classe,
                child: Text(classe),
              );
            }).toList(),
            onChanged: (String? newValue) {
              setState(() {
                _classeEleveSelectionnee = newValue;
              });
            },
          ),
          const SizedBox(height: 16),
          Expanded(
            child: _classeEleveSelectionnee != null
                ? _buildTableauEleves(_classeEleveSelectionnee!)
                : const Center(child: Text('Sélectionnez une classe')),
          ),
        ],
      ),
    );
  }

  // Widget pour construire le tableau des élèves
  Widget _buildTableauEleves(String classe) {
    // Trier les élèves par ordre alphabétique de nom
    eleves[classe]!.sort((a, b) => a.nom.compareTo(b.nom));

    return SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: DataTable(
          columns: const [
            DataColumn(label: Text('Numéro')),
            DataColumn(label: Text('Nom')),
            DataColumn(label: Text('Prénom')),
            DataColumn(label: Text('Date de naissance')),
            DataColumn(label: Text('Lieu de naissance')),
            DataColumn(label: Text('Numéro de parent')),
            DataColumn(label: Text('Numéro d\'élève')),
            DataColumn(label: Text('Actions')),
          ],
          rows: eleves[classe]!.asMap().entries.map((entry) {
            final index = entry.key;
            final eleve = entry.value;
            return DataRow(
              cells: [
                DataCell(Text((index + 1).toString())), // Numéro de ligne
                DataCell(Text(eleve.nom)),
                DataCell(Text(eleve.prenom)),
                DataCell(Text(eleve.dateNaissance)),
                DataCell(Text(eleve.lieuNaissance)),
                DataCell(Text(eleve.telParents)),
                DataCell(Text(eleve.tel ?? '')), // Gérer si 'tel' est null
                DataCell(
                  Row(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      IconButton(
                        icon: const Icon(Icons.edit),
                        onPressed: () {
                          _afficherDialogModifierEleve(classe, index);
                        },
                      ),
                      IconButton(
                        icon: const Icon(Icons.delete),
                        onPressed: () {
                          _supprimerEleve(classe, index);
                        },
                      ),
                    ],
                  ),
                ),
              ],
            );
          }).toList(),
        ),
      ),
    );
  }

  void _afficherDialogModifierEleve(String classe, int index) {
    final eleve = eleves[classe]![index];
    _nomEleveController.text = eleve.nom;
    _prenomEleveController.text = eleve.prenom;
    _dateNaissanceEleveController.text = eleve.dateNaissance;
    _lieuNaissanceEleveController.text = eleve.lieuNaissance;
    _telEleveController.text = eleve.tel ?? ''; // Gérer si 'tel' est null
    _telParentsEleveController.text = eleve.telParents;

    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Modifier les informations de l\'élève'),
          content: SingleChildScrollView(
            child: Column(
              children: [
                TextFormField(
                  controller: _nomEleveController,
                  decoration: const InputDecoration(labelText: 'Nom'),
                ),
                TextFormField(
                  controller: _prenomEleveController,
                  decoration: const InputDecoration(labelText: 'Prénom'),
                ),
                TextFormField(
                  controller: _dateNaissanceEleveController,
                  decoration: const InputDecoration(labelText: 'Date de naissance'),
                  onTap: () async {
                    DateTime? pickedDate = await showDatePicker(
                      context: context,
                      initialDate: DateTime.now(),
                      firstDate: DateTime(1900),
                      lastDate: DateTime.now(),
                    );

                    if (pickedDate != null) {
                      String formattedDate =
                          DateFormat('dd/MM/yyyy').format(pickedDate);
                      setState(() {
                        _dateNaissanceEleveController.text = formattedDate;
                      });
                    }
                  },
                ),
                TextFormField(
                  controller: _lieuNaissanceEleveController,
                  decoration: const InputDecoration(labelText: 'Lieu de naissance'),
                ),
                TextFormField(
                  controller: _telEleveController,
                  decoration: const InputDecoration(labelText: 'Numéro de téléphone'),
                ),
                TextFormField(
                  controller: _telParentsEleveController,
                  decoration:
                      const InputDecoration(labelText: 'Numéro des parents'),
                ),
              ],
            ),
          ),
          actions: <Widget>[
            TextButton(
              child: const Text('Annuler'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              child: const Text('Enregistrer'),
              onPressed: () {
                setState(() {
                  eleves[classe]![index].nom = _nomEleveController.text;
                  eleves[classe]![index].prenom =
                      _prenomEleveController.text;
                  eleves[classe]![index].dateNaissance =
                      _dateNaissanceEleveController.text;
                  eleves[classe]![index].lieuNaissance =
                      _lieuNaissanceEleveController.text;
                  eleves[classe]![index].tel = _telEleveController.text;
                  eleves[classe]![index].telParents =
                      _telParentsEleveController.text;
                });
                Navigator.of(context).pop();
                _afficherMessage(
                    'Les informations de l\'élève ont été modifiées.');
              },
            ),
          ],
        );
      },
    );
  }

  void _supprimerEleve(String classe, int index) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Supprimer l\'élève'),
          content: const Text(
              'Êtes-vous sûr de vouloir supprimer cet élève de la base de données ?'),
          actions: <Widget>[
            TextButton(
              child: const Text('Annuler'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              child: const Text('Supprimer'),
              onPressed: () {
                setState(() {
                  eleves[classe]!.removeAt(index);
                });
                Navigator.of(context).pop();
                _afficherMessage('Élève supprimé de la base de données.');
              },
            ),
          ],
        );
      },
    );
  }

  Widget _buildGestionClasses() {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        children: [
          const Text(
            "Gestion des classes",
            style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 16),
          Expanded(
            child: classes.isEmpty
                ? const Center(child: Text('Aucune classe créée.'))
                : ListView.builder(
                    itemCount: classes.length,
                    itemBuilder: (context, index) {
                      return Card(
                        margin: const EdgeInsets.only(bottom: 8.0),
                        child: ListTile(
                          title: Text(classes[index]),
                          trailing: Row(
                            mainAxisSize: MainAxisSize.min,
                            children: [
                              IconButton(
                                  onPressed: () {
                                    _afficherDialogModifierClasse(index);
                                  },
                                  icon: const Icon(Icons.edit)),
                              IconButton(
                                  onPressed: () {
                                    _supprimerClasse(index);
                                  },
                                  icon: const Icon(Icons.delete)),
                            ],
                          ),
                        ),
                      );
                    },
                  ),
          ),
          ElevatedButton(
            onPressed: () {
              _afficherDialogAjouterClasse();
            },
            child: const Text('Ajouter une classe'),
          ),
        ],
      ),
    );
  }

  void _afficherDialogAjouterClasse() {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Ajouter une nouvelle classe'),
          content: Form(
            key: _formKeyClasse,
            child: TextFormField(
              controller: _nomEleveController,
              decoration: const InputDecoration(labelText: 'Nom de la classe'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Veuillez entrer le nom de la classe';
                }
                return null;
              },
            ),
          ),
          actions: <Widget>[
            TextButton(
              child: const Text('Annuler'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              child: const Text('Ajouter'),
              onPressed: () {
                if (_formKeyClasse.currentState!.validate()) {
                  setState(() {
                    classes.add(_nomEleveController.text);
                    _nomEleveController.clear();
                  });
                  Navigator.of(context).pop();
                  _afficherMessage('Classe ajoutée avec succès!');
                }
              },
            ),
          ],
        );
      },
    );
  }

  void _afficherDialogModifierClasse(int index) {
    _nomEleveController.text = classes[index];
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Modifier la classe'),
          content: Form(
            key: _formKeyClasse,
            child: TextFormField(
              controller: _nomEleveController,
              decoration: const InputDecoration(labelText: 'Nom de la classe'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Veuillez entrer le nom de la classe';
                }
                return null;
              },
            ),
          ),
          actions: <Widget>[
            TextButton(
              child: const Text('Annuler'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              child: const Text('Enregistrer'),
              onPressed: () {
                if (_formKeyClasse.currentState!.validate()) {
                  setState(() {
                    classes[index] = _nomEleveController.text;
                    _nomEleveController.clear();
                  });
                  Navigator.of(context).pop();
                  _afficherMessage(
                      'Le nom de la classe a été modifié avec succès!');
                }
              },
            ),
          ],
        );
      },
    );
  }

  void _supprimerClasse(int index) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Supprimer la classe'),
          content: const Text(
              'Êtes-vous sûr de vouloir supprimer cette classe ? Cette action supprimera également tous les élèves associés à cette classe.'),
          actions: <Widget>[
            TextButton(
              child: const Text('Annuler'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              child: const Text('Supprimer'),
              onPressed: () {
                setState(() {
                  String classeASupprimer = classes[index];
                  classes.removeAt(index);
                  eleves.remove(
                      classeASupprimer); // Supprimer les élèves de la classe
                });
                Navigator.of(context).pop();
                _afficherMessage('Classe supprimée avec succès!');
              },
            ),
          ],
        );
      },
    );
  }

  Widget _buildInscriptionProfesseur() {
    return SingleChildScrollView(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        children: <Widget>[
          const Text(
            "Inscription d'un nouveau professeur",
            style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 20),
          Form( // Début du formulaire principal
            key: _formKeyProfesseur,
            child: Column(
              children: <Widget>[
                TextFormField(
                  controller: _nomProfesseurController,
                  decoration: const InputDecoration(
                    labelText: 'Nom',
                    border: OutlineInputBorder(),
                  ),
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return 'Veuillez entrer le nom du professeur';
                    }
                    return null;
                  },
                ),
                const SizedBox(height: 16),
                TextFormField(
                  controller: _prenomProfesseurController,
                  decoration: const InputDecoration(
                    labelText: 'Prénom',
                    border: OutlineInputBorder(),
                  ),
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return 'Veuillez entrer le prénom du professeur';
                    }
                    return null;
                  },
                ),
                const SizedBox(height: 16),
                TextFormField(
                  controller: _dateNaissanceProfesseurController,
                  decoration: const InputDecoration(
                    labelText: 'Date de naissance (JJ/MM/AAAA)',
                    border: OutlineInputBorder(),
                  ),
                  onTap: () async {
                    DateTime? pickedDate = await showDatePicker(
                      context: context,
                      initialDate: DateTime.now(),
                      firstDate: DateTime(1900),
                      lastDate: DateTime.now(),
                    );

                    if (pickedDate != null) {
                      String formattedDate =
                          DateFormat('dd/MM/yyyy').format(pickedDate);
                      setState(() {
                        _dateNaissanceProfesseurController.text = formattedDate;
                      });
                    }
                  },
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return 'Veuillez entrer la date de naissance';
                    }
                    return null;
                  },
                ),
                const SizedBox(height: 16),
                TextFormField(
                  controller: _matiereProfesseurController,
                  decoration: const InputDecoration(
                    labelText: 'Matière enseignée',
                    border: OutlineInputBorder(),
                  ),
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return 'Veuillez entrer la matière enseignée';
                    }
                    return null;
                  },
                ),
                const SizedBox(height: 16),
                TextFormField(
                  controller: _lieuResidenceProfesseurController,
                  decoration: const InputDecoration(
                    labelText: 'Lieu de résidence',
                    border: OutlineInputBorder(),
                  ),
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return 'Veuillez entrer le lieu de résidence';
                    }
                    return null;
                  },
                ),
                const SizedBox(height: 16),
                TextFormField(
                  controller: _coordonneesProfesseurController,
                  decoration: const InputDecoration(
                    labelText: 'Coordonnées',
                    border: OutlineInputBorder(),
                  ),
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return 'Veuillez entrer les coordonnées';
                    }
                    return null;
                  },
                ),
                const SizedBox(height: 16),
                DropdownButtonFormField<String>(
                  value: _genreProfesseurSelectionne,
                  decoration: const InputDecoration(
                    labelText: 'Genre',
                    border: OutlineInputBorder(),
                  ),
                  items: const ['Homme', 'Femme']
                      .map<DropdownMenuItem<String>>((String value) {
                    return DropdownMenuItem<String>(
                      value: value,
                      child: Text(value),
                    );
                  }).toList(),
                  onChanged: (String? newValue) {
                    setState(() {
                      _genreProfesseurSelectionne = newValue!;
                    });
                  },
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return 'Veuillez sélectionner un genre';
                    }
                    return null;
                  },
                ),
                const SizedBox(height: 16),
                const Text(
                  'Emploi du temps :',
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                ),
                const SizedBox(height: 10),
                _buildEmploiDuTemps(),
                const SizedBox(height: 16),
                ElevatedButton( // Bouton "Inscrire" dans le formulaire
                  onPressed: () {
                    if (_formKeyProfesseur.currentState!.validate()) {
                      _inscrireProfesseur();
                    }
                  },
                  child: const Text('Inscrire'),
                ),
              ],
            ),
          ), // Fin du formulaire principal
          const SizedBox(height: 16), // Espace entre le formulaire et le bouton d         'image
          ElevatedButton( // Bouton "Choisir une image" en dehors du formulaire
            onPressed: () async {
              FilePickerResult? result =
                  await FilePicker.platform.pickFiles(type: FileType.image);

              if (result != null) {
                setState(() {
                  _imagePathProfesseur = result.files.single.path;
                });
              }
            },
            child: const Text('Choisir une image'),
          ),
        ],
      ),
    );
  }

  Widget _buildEmploiDuTemps() {
    return Container(
      decoration: BoxDecoration(
        border: Border.all(color: Colors.grey),
        borderRadius: BorderRadius.circular(8.0),
      ),
      padding: const EdgeInsets.all(16.0),
      child: Table(
        border: TableBorder.all(color: Colors.grey),
        children: [
          TableRow(
            children: [
              const TableCell(
                child: Center(child: Text('Heure')),
              ),
              for (String jour in [
                "Lundi    ",
                "Mardi   ",
                "Mercredi ",
                "Jeudi  ",
                "Vendredi",
                "Samedi "
              ])
                TableCell(
                  child: Center(child: Text(jour)),
                ),
            ],
          ),
          for (String heure in [
            "8h-10h",
            "10h-12h",
            "12h-14h",
            "14h-16h",
            "16h-18h"
          ])
            TableRow(
              children: [
                TableCell(
                  child: Center(child: Text(heure)),
                ),
                for (String jour in [
                  "Lundi    ",
                  "Mardi   ",
                  "Mercredi ",
                  "Jeudi  ",
                  "Vendredi",
                  "Samedi "
                ])
                  TableCell(
                    child: DropdownButton<String?>(
                      value: emploiDuTemps[heure]![jour],
                      items: [
                        const DropdownMenuItem<String?>(
                          value: null,
                          child: Text(''),
                        ),
                        ...classes.map((classe) {
                          return DropdownMenuItem<String?>(
                            value: classe,
                            child: Text(classe),
                          );
                        }),
                      ],
                      onChanged: (newValue) {
                        setState(() {
                          emploiDuTemps[heure]![jour] = newValue;
                        });
                      },
                    ),
                  ),
              ],
            ),
        ],
      ),
    );
  }

  void _inscrireProfesseur() {
    String nom = _nomProfesseurController.text;
    String prenom = _prenomProfesseurController.text;
    String dateNaissance = _dateNaissanceProfesseurController.text;
    String matiere = _matiereProfesseurController.text;
    String lieuResidence = _lieuResidenceProfesseurController.text;
    String coordonnees = _coordonneesProfesseurController.text;
    String genre = _genreProfesseurSelectionne!;
    String? imagePath = _imagePathProfesseur; // Peut être null

    // Construire l'emploi du temps à partir de emploiDuTemps
    Map<String, Map<String, String?>> edt = {};
    emploiDuTemps.forEach((heure, jours) {
      edt[heure] = {};
      jours.forEach((jour, classe) {
        edt[heure]![jour] = classe;
      });
    });

    // Créer un nouvel objet Professeur
    Professeur nouveauProfesseur = Professeur(
      nom: nom,
      prenom: prenom,
      dateNaissance: dateNaissance,
      matiere: matiere,
      lieuResidence: lieuResidence,
      coordonnees: coordonnees,
      genre: genre,
      imagePath: imagePath,
      emploiDuTemps: edt,
    );

    setState(() {
      professeurs.add(nouveauProfesseur);
      _formKeyProfesseur.currentState!.reset();
      _genreProfesseurSelectionne = null;
      _imagePathProfesseur = null; // Réinitialiser le chemin de l'image
      _afficherMessage('Professeur inscrit avec succès!');

      // Réinitialiser l'emploi du temps affiché
      emploiDuTemps = {};
      for (String heure in [
        "8h-10h",
        "10h-12h",
        "12h-14h",
        "14h-16h",
        "16h-18h"
      ]) {
        emploiDuTemps[heure] = {
          "Lundi    ": null,
          "Mardi   ": null,
          "Mercredi ": null,
          "Jeudi  ": null,
          "Vendredi": null,
          "Samedi ": null,
        };
      }
    });
  }

  Widget _buildGestionProfesseurs() {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text(
            'Gestion des professeurs',
            style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 16),
          Expanded(
            child: professeurs.isEmpty
                ? const Center(child: Text('Aucun professeur inscrit.'))
                : ListView.builder(
                    itemCount: professeurs.length,
                    itemBuilder: (context, index) {
                      final professeur = professeurs[index];
                      return Card(
                        margin: const EdgeInsets.only(bottom: 8.0),
                        child: ListTile(
                          leading: professeur.imagePath != null
                              ? Image.file(
                                  File(professeur.imagePath!),
                                  width: 50,
                                  height: 50,
                                  fit: BoxFit.cover,
                                )
                              : const Icon(Icons.person, size: 50),
                          title: Text('${professeur.nom} ${professeur.prenom}'),
                          subtitle: Text(
                              '${professeur.matiere} - ${professeur.coordonnees}'),
                          trailing: Row(
                            mainAxisSize: MainAxisSize.min,
                            children: [
                              IconButton(
                                icon: const Icon(Icons.edit),
                                onPressed: () {
                                  _afficherDialogModifierProfesseur(index);
                                },
                              ),
                              IconButton(
                                icon: const Icon(Icons.delete),
                                onPressed: () {
                                  _supprimerProfesseur(index);
                                },
                              ),
                            ],
                          ),
                        ),
                      );
                    },
                  ),
          ),
        ],
      ),
    );
  }

  void _afficherDialogModifierProfesseur(int index) {
    final professeur = professeurs[index];
    _nomProfesseurController.text = professeur.nom;
    _prenomProfesseurController.text = professeur.prenom;
    _dateNaissanceProfesseurController.text = professeur.dateNaissance;
    _matiereProfesseurController.text = professeur.matiere;
    _lieuResidenceProfesseurController.text = professeur.lieuResidence;
    _coordonneesProfesseurController.text = professeur.coordonnees;
    _genreProfesseurSelectionne = professeur.genre;
    _imagePathProfesseur = professeur.imagePath;

    // Mettre à jour l'emploi du temps affiché
    professeur.emploiDuTemps.forEach((heure, jours) {
      jours.forEach((jour, classe) {
        emploiDuTemps[heure]![jour] = classe;
      });
    });

    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Modifier les informations du professeur'),
          content: SingleChildScrollView(
            child: Column(
              children: [
                TextFormField(
                  controller: _nomProfesseurController,
                  decoration: const InputDecoration(labelText: 'Nom'),
                ),
                TextFormField(
                  controller: _prenomProfesseurController,
                  decoration: const InputDecoration(labelText: 'Prénom'),
                ),
                TextFormField(
                  controller: _dateNaissanceProfesseurController,
                  decoration: const InputDecoration(labelText: 'Date de naissance'),
                  onTap: () async {
                    DateTime? pickedDate = await showDatePicker(
                      context: context,
                      initialDate: DateTime.now(),
                      firstDate: DateTime(1900),
                      lastDate: DateTime.now(),
                    );

                    if (pickedDate != null) {
                      String formattedDate =
                          DateFormat('dd/MM/yyyy').format(pickedDate);
                      setState(() {
                        _dateNaissanceProfesseurController.text = formattedDate;
                      });
                    }
                  },
                ),
                TextFormField(
                  controller: _matiereProfesseurController,
                  decoration: const InputDecoration(labelText: 'Matière enseignée'),
                ),
                TextFormField(
                  controller: _lieuResidenceProfesseurController,
                  decoration: const InputDecoration(labelText: 'Lieu de résidence'),
                ),
                TextFormField(
                  controller: _coordonneesProfesseurController,
                  decoration: const InputDecoration(labelText: 'Coordonnées'),
                ),
                DropdownButtonFormField<String>(
                  value: _genreProfesseurSelectionne,
                  decoration: const InputDecoration(labelText: 'Genre'),
                  items: const ['Homme', 'Femme']
                      .map<DropdownMenuItem<String>>((String value) {
                    return DropdownMenuItem<String>(
                      value: value,
                      child: Text(value),
                    );
                  }).toList(),
                  onChanged: (String? newValue) {
                    setState(() {
                      _genreProfesseurSelectionne = newValue!;
                    });
                  },
                ),
                // Emploi du temps
                const Text(
                  'Emploi du temps :',
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                ),
                const SizedBox(height: 10),
                _buildEmploiDuTemps(),
                const SizedBox(height: 16),
                ElevatedButton(
                  onPressed: () async {
                    FilePickerResult? result = await FilePicker.platform
                        .pickFiles(type: FileType.image);
                    if (result != null) {
                      setState(() {
                        _imagePathProfesseur = result.files.single.path;
                      });
                    }
                  },
                  child: const Text('Changer d\'image'),
                ),
              ],
            ),
          ),
          actions: <Widget>[
            TextButton(
              child: const Text('Annuler'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              child: const Text('Enregistrer'),
              onPressed: () {
                setState(() {
                  professeur.nom = _nomProfesseurController.text;
                  professeur.prenom = _prenomProfesseurController.text;
                  professeur.dateNaissance =
                      _dateNaissanceProfesseurController.text;
                  professeur.matiere = _matiereProfesseurController.text;
                  professeur.lieuResidence =
                      _lieuResidenceProfesseurController.text;
                  professeur.coordonnees = _coordonneesProfesseurController.text;
                  professeur.genre = _genreProfesseurSelectionne!;
                  professeur.imagePath = _imagePathProfesseur;
                  // Mettre à jour l'emploi du temps du professeur
                  professeur.emploiDuTemps =
                      Map<String, Map<String, String?>>.from(emploiDuTemps);
                });
                Navigator.of(context).pop();
                _afficherMessage(
                    'Les informations du professeur ont été modifiées.');
              },
            ),
          ],
        );
      },
    );
  }

  void _supprimerProfesseur(int index) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Supprimer le professeur'),
          content: const Text(
              'Êtes-vous sûr de vouloir supprimer ce professeur de la base de données ?'),
          actions: <Widget>[
            TextButton(
              child: const Text('Annuler'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              child: const Text('Supprimer'),
              onPressed: () {
                setState(() {
                  professeurs.removeAt(index);
                });
                Navigator.of(context).pop();
                _afficherMessage(
                    'Professeur supprimé de la base de données.');
              },
            ),
          ],
        );
      },
    );
  }

  // Fonctions pour Ajout de notes
  Widget _buildAjoutNotes() {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text(
            'Ajout de notes',
            style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 16),
          DropdownButton<String>(
            value: _classeEleveSelectionnee,
            hint: const Text('Sélectionnez une classe'),
            items: classes.map((String classe) {
              return DropdownMenuItem<String>(
                value: classe,
                child: Text(classe),
              );
            }).toList(),
            onChanged: (String? newValue) {
              setState(() {
                _classeEleveSelectionnee = newValue;
              });
            },
          ),
          const SizedBox(height: 16),
          if (_classeEleveSelectionnee != null)
            Expanded(
              child: _buildNotesParClasse(_classeEleveSelectionnee!),
            ),
        ],
      ),
    );
  }

  Widget _buildNotesParClasse(String classe) {
    notes.putIfAbsent(classe, () => {});
    return Column(
      children: [
        ElevatedButton(
          onPressed: () {
            _afficherDialogAjouterMatiere(classe);
          },
          child: const Text('Ajouter une matière'),
        ),
        const SizedBox(height: 16),
        const Text(
          'Méthode de calcul de la moyenne :',
          style: TextStyle(fontSize: 16),
        ),
        Row(
          children: [
            Radio<String>(
              value: 'meilleures',
              groupValue: _methodeCalcul,
              onChanged: (value) {
                setState(() {
                  _methodeCalcul = value!;
                });
              },
            ),
            const Text('Deux meilleures notes'),
            Radio<String>(
              value: 'toutes',
              groupValue: _methodeCalcul,
              onChanged: (value) {
                setState(() {
                  _methodeCalcul = value!;
                });
              },
            ),
            const Text('Toutes les notes'),
          ],
        ),
        const SizedBox(height: 16),
        Expanded(
          child: DefaultTabController(
            length: notes[classe]!.length,
            child: Column(
              children: [
                TabBar(
                  isScrollable: true,
                  tabs: notes[classe]!.keys.map((matiere) {
                    return Tab(text: matiere);
                  }).toList(),
                ),
                Expanded(
                  child: TabBarView(
                    children: notes[classe]!.keys.map((matiere) {
                      return _buildTableauNotes(classe, matiere);
                    }).toList(),
                  ),
                ),
              ],
            ),
          ),
        ),
      ],
    );
  }

  void _afficherDialogAjouterMatiere(String classe) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Ajouter une matière'),
          content: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              TextFormField(
                controller: _nomMatiereController,
                decoration:
                    const InputDecoration(labelText: 'Nom de la matière'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Veuillez entrer le nom de la matière';
                  }
                  return null;
                },
              ),
              TextFormField(
                controller: _coefMatiereController,
                decoration: const InputDecoration(labelText: 'Coefficient'),
                keyboardType: TextInputType.number,
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Veuillez entrer le coefficient';
                  }
                  return null;
                },
              ),
            ],
          ),
          actions: <Widget>[
            TextButton(
              child: const Text('Annuler'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              child: const Text('Ajouter'),
              onPressed: () {
                if (_formKeyClasse.currentState!.validate()) {
                  setState(() {
                    notes[classe]![_nomMatiereController.text] = {
                      'coef': double.parse(_coefMatiereController.text),
                      'eleves': {},
                    };
                    _nomMatiereController.clear();
                    _coefMatiereController.clear();
                  });
                  Navigator.of(context).pop();
                  _afficherMessage('Matière ajoutée avec succès!');
                }
              },
            ),
          ],
        );
      },
    );
  }

  Widget _buildTableauNotes(String classe, String matiere) {
    notes[classe]![matiere]!['eleves']
        .putIfAbsent('Élèves', () => <Map<String, dynamic>>[]);
    return SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: DataTable(
          columns: const [
            DataColumn(label: Text('Nom')),
            DataColumn(label: Text('Prénom')),
            DataColumn(label: Text('Note 1')),
            DataColumn(label: Text('Note 2')),
            DataColumn(label: Text('Note 3')),
            DataColumn(label: Text('Actions')),
          ],
          rows: eleves[classe]!.map((eleve) {
            String nomCompletEleve = '${eleve.nom} ${eleve.prenom}';
            notes[classe]![matiere]!['eleves']
                .putIfAbsent(nomCompletEleve, () => []);
            return DataRow(
              cells: [
                DataCell(Text(eleve.nom)),
                DataCell(Text(eleve.prenom)),
                ...List.generate(
                  3,
                  (index) => DataCell(
                    TextFormField(
                      initialValue: notes[classe]![matiere]!['eleves']
                              [nomCompletEleve]
                          .asMap()
                          .containsKey(index)
                          ? notes[classe]![matiere]!['eleves']
                              [nomCompletEleve][index]
                              .toString()
                          : '',
                      keyboardType: TextInputType.number,
                      onChanged: (value) {
                        setState(() {
                          if (value.isNotEmpty) {
                            notes[classe]![matiere]!['eleves']
                                [nomCompletEleve][index] = double.parse(value);
                          } else {
                            notes[classe]![matiere]!['eleves']
                                .remove(nomCompletEleve);
                          }
                        });
                      },
                    ),
                  ),
                ),
                DataCell(
                  Row(
                    children: [
                      IconButton(
                        icon: const Icon(Icons.delete),
                        onPressed: () {
                          setState(() {
                            notes[classe]![matiere]!['eleves']
                                .remove(nomCompletEleve);
                          });
                        },
                      ),
                    ],
                  ),
                ),
              ],
            );
          }).toList(),
        ),
      ),
    );
  }

  // Fonctions pour Calcul de moyenne
  Widget _buildCalculMoyenne() {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text(
            'Calcul de moyenne',
            style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 16),
          DropdownButton<String>(
            value: _classeEleveSelectionnee,
            hint: const Text('Sélectionnez une classe'),
            items: classes.map((String classe) {
              return DropdownMenuItem<String>(
                value: classe,
                child: Text(classe),
              );
            }).toList(),
            onChanged: (String? newValue) {
              setState(() {
                _classeEleveSelectionnee = newValue;
              });
            },
          ),
          const SizedBox(height: 16),
          if (_classeEleveSelectionnee != null)
            Expanded(
              child: _buildMoyennesParClasse(_classeEleveSelectionnee!),
            ),
        ],
      ),
    );
  }

  Widget _buildMoyennesParClasse(String classe) {
    return FutureBuilder<Map<String, double>>(
      future: _calculerMoyennesClasse(classe),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const Center(child: CircularProgressIndicator());
        } else if (snapshot.hasError) {
          return Center(child: Text('Erreur: ${snapshot.error}'));
        } else if (!snapshot.hasData || snapshot.data!.isEmpty) {
          return const Center(child: Text('Aucune note disponible.'));
        } else {
          return ListView.builder(
            itemCount: snapshot.data!.length,
            itemBuilder: (context, index) {
              String nomEleve = snapshot.data!.keys.elementAt(index);
              double moyenne = snapshot.data![nomEleve]!;
              return Card(
                margin: const EdgeInsets.only(bottom: 8.0),
                child: ListTile(
                  title: Text(nomEleve),
                  trailing: Text(
                    'Moyenne: ${moyenne.toStringAsFixed(2)}',
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                      color: moyenne >= 10
                          ? Colors.green
                          : moyenne >= 8
                              ? Colors.orange
                              : Colors.red,
                    ),
                  ),
                ),
              );
            },
          );
        }
      },
    );
  }

  Future<Map<String, double>> _calculerMoyennesClasse(
      String classe) async {
    Map<String, double> moyennes = {};
    for (var eleve in eleves[classe]!) {
      double sommeNotes = 0;
      double sommeCoefficients = 0;
      String nomCompletEleve = '${eleve.nom} ${eleve.prenom}';
      notes[classe]!.forEach((matiere, data) {
        List<double> notesEleve = (data['eleves'][nomCompletEleve] ?? [])
            .whereType<double>()
            .toList();
        if (notesEleve.isNotEmpty) {
          double coefficient = data['coef'];
          if (_methodeCalcul == 'meilleures') {
            notesEleve.sort();
            notesEleve = notesEleve.sublist(
                notesEleve.length - 2); // Prendre les deux meilleures notes
          }
          sommeNotes +=
              notesEleve.reduce((a, b) => a + b) * coefficient;
          sommeCoefficients += coefficient;
        }
      });
      if (sommeCoefficients > 0) {
        moyennes[nomCompletEleve] = sommeNotes / sommeCoefficients;
      }
    }
    return moyennes;
  }

  // Fonction pour afficher un message
  void _afficherMessage(String message) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text(message)),
    );
  }
}