Безопасное использование для useScrollController? (Зависания)

#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. Ах, это имеет смысл, спасибо, подумал, что что-то не так с моим кодом 🙂