【发布时间】:2019-01-31 23:34:24
【问题描述】:
我有一个表单,它使用FocusNodes 直观地指示表单的哪个部分处于活动状态。一个字段将 PopupRoute 扩展为一种弹出“键盘”。我的问题是,当我按下该字段时,键盘会弹出,但焦点的视觉效果不会出现。
来自FocusNode 的侦听器的一些调试显示它获得焦点但立即失去焦点。我想是因为新的PopupRoute有了新的FocusScopeNode,所以我的FocusNode没有焦点了。
如何在另一条路线上保持该领域的焦点?我试过了:
- 在所有构建方法中使用
FocusScope.of(context).reparentIfNeeded(focusNode),但没有做任何事情(我不太了解这个函数tbh) - 将当前的
FocusScope.of(context)传递给我的自定义PopupRoute以供使用。这确实有效,但弹出后,我无法再集中注意力(我猜它被丢弃了?)
代码方面,我在现场点击时调用requestFocus,并在 initState 中添加此侦听器:
widget.focusNode.addListener(() {
print(widget.focusNode);
if (widget.focusNode.hasFocus) {
Navigator.of(context).push(
CustomKeyboardPopupRoute(
state: widget.state,
position: //position stuff,
focusScopeNode: FocusScope.of(context), //the second of my ideas which didn't quite work above
)
).then((_) {
widget.focusNode.unfocus();
});
});
【问题讨论】: