Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Utilizar InheritedWidget para detalhar informações

Tenho um Widget ListExercises que apresenta uma lista com SlidableActions que podem ser 'Selecionar' ou 'Detalhar', e outro Widget chamado DetailsExercise que basicamente precisa pegar item selecionado no ListExercise e mostrar suas informações. InhetitedWidget seria a melhor abordagem para esse caso? Como posso modelar a classe corretamente?

class ExerciseDetailsInherited extends InheritedWidget {
  final ExternalExercise exercise = ExternalExercise(
      id: '',
      name: '',
      force: '',
      level: '',
      mechanic: '',
      equipment: '',
      primaryMuscles: [],
      secondaryMuscles: [],
      instructions: [],
      category: '',
      images: []);

  ExerciseDetailsInherited({
    super.key,
    required super.child,
  });

  static ExerciseDetailsInherited? of(BuildContext context) {
    return context
        .dependOnInheritedWidgetOfExactType<ExerciseDetailsInherited>();
  }

  void updateExercise(ExternalExercise newExcercise) {
    // como atualizar a variavel do tipo final aqui? 
  }

  @override
  bool updateShouldNotify(ExerciseDetailsInherited oldWidget) {
    return oldWidget.exercise != exercise;
  }
}
ExerciseDetailsInherited(
     child: ListExercises(
    pageController: _pageController,
  ),
),
DetailsExercise(
  pageController: _pageController,
),
1 resposta
solução!

Oi Rafaela! Como vai?

A utilização do InheritedWidget pode ser uma boa abordagem para compartilhar dados entre widgets que não têm uma relação direta de pai-filho, como no seu caso com o ListExercises e o DetailsExercise. No entanto, é importante lembrar que o InheritedWidget é mais adequado para dados que não mudam frequentemente, pois ele não é reativo por si só.

No seu caso, como você precisa atualizar as informações do exercício selecionado, talvez seja interessante considerar o uso de um gerenciador de estado mais reativo, como o Provider ou o Riverpod, que são mais adequados para lidar com atualizações de estado.

Mas, se você ainda quiser seguir com o InheritedWidget, você pode modelar sua classe de uma forma que permita a atualização do exercício. Uma maneira de fazer isso é utilizando um ValueNotifier ou um ChangeNotifier para gerenciar o estado interno do exercício.

Com essa abordagem, você pode ouvir as mudanças no exerciseNotifier em seus widgets, permitindo que eles reajam às atualizações. No DetailsExercise, por exemplo, você poderia usar um ValueListenableBuilder para reconstruir o widget sempre que o exercício mudar.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.