J’aimerais partager avec vous un petit problème que j’ai rencontré en passant une Map avec différents Components comme paramètres à un autre Component, dont certains contiennent le mixin RiverpodComponentMixin.

Avec le code suivant, si vous ajoutez un Component contenant le mixin RiverpodComponentMixin, puis le supprimez et l’ajoutez à nouveau, vous rencontrerez un problème.

class MyRiverpodComponent extends Component with RiverpodComponentMixin {
  late TextComponent textComponent;
  String title = "Example";

  @override
  FutureOr<void> onLoad() {
    add(
      textComponent = TextComponent(
        text: title,
        textRenderer: TextPaint(style: const TextStyle(fontSize: 48)),
      ),
    );
    return super.onLoad();
  }

  @override
  void onMount() {
    addToGameWidgetBuild(() => ref.listen(titleProvider, (previous, String newTitle) {
          title = newTitle;
        }));
    super.onMount();
  }
}

 

class MyComplexComponent extends Component {
  final Map<String, Component> mapComponent = {
    "title": MyRiverpodComponent(),
    "text": SimpleTextComponent(),
  };

  @override
  void onLoad() {
.
.
.

À la place, vous devrez utiliser le Builder de ces Components.

class MyComplexComponent extends Component {
  final Map<String, Component Function()> mapComponent = {
    "title": () => MyRiverpodComponent(),
    "text": () => SimpleTextComponent(),
  };

  @override
  void onLoad() {
.
.
.