0

我最近开始采用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吗?不确定该怎么做。

谢谢!

4

0 回答 0