Créer une nav bar avec le Navigator 2.0

Bonjour,

Je cherche toujours à saisir les subtilités du Router pour une app web, appuyé du cours sur l’architecture… mais je tourne en rond… ainsi, dans le cours, les boutons sont liés à une page et dans ce cas pas de soucis. Mais je cherche à concevoir un widget qui encapsulerait toute ma nav, sans avoir évidemment à les réécriture dans chaque page…

J’ai donc créer un stateless menu :

abstract class IMenuViewModel {
  void userTouchedMusic();
}

class Menu extends StatelessWidget {
  //final IMenuViewModel viewModel;
  final RouterGeneral _router;
  const Menu(this._router, {super.key});

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.start,
      children: [
        Expanded(
            flex: 5,
            child: ElevatedButton(
              onPressed: _router.displayMusic(),
              child: Text(S.of(context).music),
            )),
      ],
    );
  }
}

avec son « viewmodel », vraiment afin de reprendre l’archi du cours tant que je ne suis pas au clair… :

abstract class RouterGeneral {
  displayMusic();
}

Puis dans le delegate :

if (_displayMusic == true) {
        final pageMusicScreen =
            MusicScreen((MusicViewModel(_apiManager)), this);
        pagesList.add(MaterialPage(child: pageMusicScreen));
      }

Je passe donc à la view menu (que je mettrais dans chaque page) le this pour lui fournir le router (le delegate implements RouterGeneral

puis la fonction surchargée :

 @override
  displayMusic() {
    _displayMusic = true;
    notifyListeners();
  }

Dans une page j’appelle donc : (le this est bien le router)

Menu(routerGeneral),

Mais voilà, le bouton reste grisé et surtout la console me renvoie tellement d’erreur que je ne peux toutes les citer… mais ça commence ainsi :

This Router<Object> widget cannot be marked as needing to build because the framework is already in
the process of building widgets. A widget can be marked as needing to be built during the build
phase only if one of its ancestors is currently building. This exception is allowed because the
framework builds parent widgets before children, which means a dirty descendant will always be
built. Otherwise, the framework might not visit this widget during this build phase.
The widget on which setState() or markNeedsBuild() was called was:
  Router<Object>
The widget which was currently being built when the offending call was made was:
  Menu

Je sais m’y prendre comme un manche, mais je ne vois pas où !

Merci

A priori juste un soucis dans le passage du router…