#flutter #hook #scrollcontroller
#флаттер #крюк #scrollcontroller
Вопрос:
Будет ли следующий код считаться безопасным?
class SomeWidget extends HookWidget {
@override
Widget build(BuildContext context) {
final controller = useScrollController();
controller.addListener(_someCallback);
return ...;
}
}
Я конкретно имею в виду addListener
. В этом руководстве по ResoCoder hooks он добавляет слушателя в initHook
функцию пользовательского подключения.
Я знаю, что ResoCoder написал пользовательский хук для удаления ScrollController…Мне больше любопытно, как ведет себя слушатель контроллера (я понятия не имею, что разрешено, а что нет для слушателей). Любые ресурсы, о которых я могу узнать о них, были бы замечательными.
Спасибо 🙂
Ответ №1:
Побочные эффекты, такие как добавление слушателей, не должны выполняться непосредственно внутри build
. Если виджет перестроен, это приведет к повторному добавлению слушателя
Вместо этого вы можете использовать useEffect
:
final controller = useScrollController();
useEffect(() {
controller.addListener(_someCallback);
return () => controller.removeListener(_someCallback);
}, [controller]);
Комментарии:
1. Ах, это имеет смысл, спасибо, подумал, что что-то не так с моим кодом 🙂