Comment charger et éditer des checkbox dans un widget?

Bonjour,

Il y a quelque chose que je ne comprends pas avec les initState() et les createState… Je veux éditer l’un de mes formulaires dont certaines parties sont des widgets histoire de converser un affichage pas trop lourd (c’est un gros formulaire avec presque toutes les contraintes possibles).

Dans ma view de création/edition j’utilise un initState avec un fonction async pour aller chercher toutes les datas :

  List<dynamic> _listLang = [];

 @override
  void initState() {
    super.initState();
      getDataToSet(widget.viewModel.idSelected!);
  }

Future<void> getDataToSet(int id) async {
    modelToEdit = await widget.viewModel.getModelVM(id: id);
    setState(() {
       _listLang = modelToEdit !.lang!;
}

Cela fonctionne, mais il faut encore transmettre ses données au bon moment au widget qui gère mes checkbox.

Ainsi plus loin je déclare mon widget :

  CheckBoxLang(
        getlang: widget.viewModel.getLangVM(),
        listLang: widget.viewModel.listLang,
        listToLoad: _listLang,
 ),

getlang (function) = va chercher toutes les langues dispo (afficher ensuite via un FutureBuilder)
listLang (List) = la variable de mon viewModel qui sera utiliser pour sauvegarder les données
listToLoad (List) = les données précédemment utilisées

Mais, dans mon widget

@override
  void initState() {
    super.initState();
 print("list  = ${widget.listToLoad}");

demeure toujours vide car ce code est exécuté avant… donc la liste est toujours vide et je ne peux rien afficher…

Par contre, si je positionne les données dans value de la checkbox, cela fonctionne, mais je ne peux pas les éditer, car c’est automatiquement rempli à chaque build…

Sauriez-vous ce qui m’échappe dans la logique ?

Merci !

Je pense avoir résolu le problème avec :

 @override
  void didUpdateWidget(CheckBoxLang oldWidget) {
    if (widget.listToLoad != oldWidget.listToLoad) {
      setState(() {
        for (int i = 0; i < listInit.length; i++) {
          listBool[i] = setValue(listInit[i], widget.listToLoad);
        }
      });
    }
    super.didUpdateWidget(oldWidget);
  }

Mais honnêtement, je ne suis pas certain que ce soit la méthode la plus propre…