我最近开始采用Flutter Hooks并且非常喜欢它。我能够将我的一些 StatefulWidgets 转换为 HookWidgets,这非常酷。我正在努力弄清楚的一件事是如何从由 useFocusNode 创建的FocusNode中正确删除侦听器。
如果我以StatefulWidget的方式执行此操作,它似乎运行良好(基本上遵循Flutter 文档中的这个示例):
class ItemWidget extends StatefulWidget {
...
}
class _ItemWidgetState extends State<ItemWidget> {
...
late FocusNode _focusNode;
@override
void initState() {
super.initState();
_focusNode = FocusNode(debugLabel: widget.key.toString());
_focusNode.addListener(_handleFocusChange);
}
void _handleFocusChange() {
debugPrint('${_focusNode.debugLabel} has ${_focusNode.hasFocus ? '' : 'lost'} focus');
}
@override
Widget build(BuildContext context) {
...
}
@override
void dispose() {
_focusNode.removeListener(_handleFocusChange);
super.dispose();
}
但是,我将如何使用 WidgetHook 和 useFocusNode 来做到这一点?我知道如何创建 FocusNode 并添加侦听器,但是我在哪里删除它呢?我应该为此使用useEffect吗?不确定该怎么做。
谢谢!