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();
}
}