以下代码是否安全?
class SomeWidget extends HookWidget {
@override
Widget build(BuildContext context) {
final controller = useScrollController();
controller.addListener(_someCallback);
return ...;
}
}
我指的是addListener
。在这个ResoCoder钩子教程中,他在自定义钩子的initHook
函数中添加了监听器。
我知道ResoCoder编写了自定义钩子来处理scrollController。。。我更好奇的是控制器侦听器的行为(我不知道侦听器允许什么和不允许什么(。任何能让我了解它们的资源都会很棒。
谢谢:(
添加监听器等副作用不应直接在build
中完成。如果小部件重建,则会导致侦听器再次添加
相反,您可以使用useEffect
:
final controller = useScrollController();
useEffect(() {
controller.addListener(_someCallback);
return () => controller.removeListener(_someCallback);
}, [controller]);