import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' as rootBundle; class CategoryField extends StatefulWidget { final FormFieldSetter onSaved; const CategoryField({Key? key, required this.onSaved}) : super(key: key); @override _CategoryFieldState createState() => _CategoryFieldState(); } class _CategoryFieldState extends State { String? _selectedCategory; Map> _categoryMap = {}; // Map pour stocker les catégories et sous-catégories List> _dropdownItems = []; // Liste pour stocker les éléments de menu déroulant @override void initState() { super.initState(); _loadCategories(); // Charger les catégories à partir du JSON } // Charger les catégories depuis le fichier JSON Future _loadCategories() async { try { final String jsonString = await rootBundle.rootBundle.loadString('lib/assets/json/event_categories.json'); final Map jsonMap = json.decode(jsonString); final Map> categoryMap = {}; jsonMap['categories'].forEach((key, value) { categoryMap[key] = List.from(value); }); setState(() { _categoryMap = categoryMap; _dropdownItems = _buildDropdownItems(); }); // Ajouter un log pour vérifier si les catégories sont bien chargées print("Catégories chargées: $_categoryMap"); } catch (e) { print("Erreur lors du chargement des catégories : $e"); } } // Construire les éléments du menu déroulant avec catégorisation List> _buildDropdownItems() { List> items = []; _categoryMap.forEach((category, subcategories) { items.add( DropdownMenuItem( enabled: false, child: Text( category, style: const TextStyle( fontSize: 14, fontWeight: FontWeight.bold, color: Colors.white70, ), ), ), ); for (String subcategory in subcategories) { items.add( DropdownMenuItem( value: subcategory, child: Padding( padding: const EdgeInsets.only(left: 16.0), child: Text( subcategory, style: const TextStyle(color: Colors.white), ), ), ), ); } }); // Ajouter un log pour vérifier si les éléments sont bien créés print("Éléments créés pour le menu déroulant: ${items.length}"); return items; } @override Widget build(BuildContext context) { return _dropdownItems.isEmpty ? CircularProgressIndicator() // Affiche un indicateur de chargement si les éléments ne sont pas encore prêts : DropdownButtonFormField( value: _selectedCategory, decoration: InputDecoration( labelText: 'Catégorie', labelStyle: const TextStyle(color: Colors.white70), filled: true, fillColor: Colors.white.withOpacity(0.1), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(10.0)), borderSide: BorderSide.none, ), prefixIcon: const Icon(Icons.category, color: Colors.white70), ), style: const TextStyle(color: Colors.white), dropdownColor: const Color(0xFF2C2C3E), iconEnabledColor: Colors.white70, items: _dropdownItems, onChanged: (String? newValue) { setState(() { _selectedCategory = newValue; }); }, onSaved: widget.onSaved, ); } }