Flutter, что такое StatefulHookWidget и как его использовать?

Цитата из Riverpod документация:

StatefulWidget, который может использовать Hook

Его использование очень похоже на StatefulWidget, но использует хуки внутри State.build.

Разница в том, что он может использовать Hook, который позволяет HookWidget хранить изменяемые данные без реализации State.

кроме этого, я не могу найти ни одного образца кода или другого учебника или какого-либо описания, кроме цитаты.

в этом простом HookWidget как я могу реализовать это с помощью StatefulHookWidget?

      class MyHomePage extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final store = useMemoized(() => MyStore());
    return Container();
  }
}

2 ответа

StatefulHookWidget предназначен для случаев, когда вам нужно использовать любую из переопределяемых функций обычного StatefulWidget, например didChangeDependencies, или initState, или dispose.

Как правило, если у вас нет действительно веской или нишевой причины для использования StatefulHookWidget, предпочтите HookWidget.

По сути, если мы воспроизведем ваш пример, как Class1, так и Class2 эквивалентны с точки зрения конечного продукта. Единственная разница - это словоблудие, необходимое для того, чтобы добраться туда.

      class Class1 extends HookWidget {
  const Class1({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final store = useMemoized(() => MyStore());
    return Container();
  }
}

class Class2 extends StatefulHookWidget {
  const Class2({Key? key}) : super(key: key);

  @override
  _Class2State createState() => _Class2State();
}

class _Class2State extends State<Class2> {
  @override
  Widget build(BuildContext context) {
    final store = useMemoized(() => MyStore());
    return Container();
  }
}

У меня последняя версия riverpod, поэтому я использую StatefulHookConsumerWidget Ниже приведен один из способов реализации StatefulHookConsumerWidget. Это может дать вам подсказку для вашего ответа

      class MyHomePage extends StatefulHookConsumerWidget {
  @override
  _MyHomePage State createState() => _SocietyHomeState();
}

class MyHomePage extends ConsumerState<SocietyHome> {
  Widget build(BuildContext context) {
    return Container();
  }
}
Другие вопросы по тегам