Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何立即(通过键盘)切换焦点组?_Flutter_Web_Desktop - Fatal编程技术网

Flutter 如何立即(通过键盘)切换焦点组?

Flutter 如何立即(通过键盘)切换焦点组?,flutter,web,desktop,Flutter,Web,Desktop,当从一个焦点组遍历到下一个焦点组(键盘上有tab键)时,我希望焦点移动到下一个组的第一个字段,但它似乎什么都不聚焦,然后另一个tab键移动到该组中 class MyHomePage扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回脚手架( 正文:中( 孩子:大小盒子( 宽度:double.infinity, 孩子:排( mainAxisAlignment:mainAxisAlignment.space, 儿童:[ 对于(变量i=0;i

当从一个焦点组遍历到下一个焦点组(键盘上有tab键)时,我希望焦点移动到下一个组的第一个字段,但它似乎什么都不聚焦,然后另一个tab键移动到该组中

class MyHomePage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:大小盒子(
宽度:double.infinity,
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
对于(变量i=0;i<2;i++)
聚焦动作检测器(
onFocusChange:(聚焦){
如果(!聚焦){
打印(“已离开焦点组”);
}
},
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
对于(变量i=0;i<3;i++)
大小盒子(
宽度:150,
子项:TextField(),
),
],
),
),
],
),
),
),
);
}
}

我希望在第一组的最后一个字段之后,按下
Tab
键会立即将焦点移动到下一个焦点组的第一个项目


我尝试过各种形式的
FocusNode
FocusScope
FocusScope.of(context)。\uuuuuuuuuuu
,但我发现《颤振》中的焦点管理有点混乱。

前言:我不是
焦点
方面的专家,我自己也觉得很复杂

但我相信,以下内容适用于您所追求的内容,从一列遍历到下一列,而不关注“不可见”的项目。至少在移动设备上。网络平台。。。这是一场完全不同的球赛(我怀疑它是否同样有效)

我去掉了
FocusableActionDetector
(它本身充当
FocusNode
),并将每一列包装在
FocusTraversalGroup
中。我相信,如果可能的话,颤振会尝试从一个TraversalGroup转到另一个TraversalGroup

FocusScope
包装遍历组可防止后退按钮和任何其他可单击项获得焦点(一旦
FocusScope
获得焦点)

我已经复制到下面的相关部分

└─Child 2: FocusScopeNode#c83f0(_ModalScopeState<dynamic> Focus Scope [IN FOCUS PATH])
  │ context: FocusScope
  │ IN FOCUS PATH
  │ focusedChildren: FocusScopeNode#7d536([IN FOCUS PATH])
  │
  ├─Child 1: FocusScopeNode#7d536([IN FOCUS PATH])
  │ │ context: FocusScope
  │ │ IN FOCUS PATH
  │ │ focusedChildren: FocusNode#1b886([PRIMARY FOCUS]),
  │ │   FocusNode#72c3b, FocusNode#34b25, FocusNode#3b410,
  │ │   FocusNode#02fac, FocusNode#61cd5
  │ │
  │ ├─Child 1: FocusNode#1d51e(FocusTraversalGroup)
  │ │ │ context: Focus
  │ │ │ NOT FOCUSABLE
  │ │ │
  │ │ ├─Child 1: FocusNode#3b410
  │ │ │   context: EditableText-[LabeledGlobalKey<EditableTextState>#70699]
  │ │ │
  │ │ ├─Child 2: FocusNode#34b25
  │ │ │   context: EditableText-[LabeledGlobalKey<EditableTextState>#7c822]
  │ │ │
  │ │ └─Child 3: FocusNode#72c3b
  │ │     context: EditableText-[LabeledGlobalKey<EditableTextState>#f00bc]
  │ │
  │ └─Child 2: FocusNode#bdb17(FocusTraversalGroup [IN FOCUS PATH])
  │   │ context: Focus
  │   │ NOT FOCUSABLE
  │   │ IN FOCUS PATH
  │   │
  │   ├─Child 1: FocusNode#1b886([PRIMARY FOCUS])
  │   │   context: EditableText-[LabeledGlobalKey<EditableTextState>#c5a56]
  │   │   PRIMARY FOCUS
  │   │
  │   ├─Child 2: FocusNode#61cd5
  │   │   context: EditableText-[LabeledGlobalKey<EditableTextState>#a4dd8]
  │   │
  │   └─Child 3: FocusNode#02fac
  │       context: EditableText-[LabeledGlobalKey<EditableTextState>#fe12d]
  │
  ├─Child 2: FocusNode#4886e
  │   context: Focus
  │
  └─Child 3: FocusNode#9241b
      context: Focus
└─子2:FocusScopeNode#c83f0(_ModalScopeState焦点范围[焦点路径中])
│ 背景:聚焦镜
│ 对焦路径
│ focusedChildren:FocusScopeNode#7d536([焦点路径])
│
├─子1:FocusScopeNode#7d536([焦点路径])
│ │ 背景:聚焦镜
│ │ 对焦路径
│ │ 焦点儿童:焦点节点#1b886([主要焦点]),
│ │   FocusNode#72c3b、FocusNode#34b25、FocusNode#3b410、,
│ │   聚焦节点#02fac,聚焦节点#61cd5
│ │
│ ├─子1:FocusNode#1d51e(FocusTraversalGroup)
│ │ │ 背景:焦点
│ │ │ 不聚焦
│ │ │
│ │ ├─子1:FocusNode#3b410
│ │ │   上下文:EditableText-[LabeledGlobalKey#70699]
│ │ │
│ │ ├─子2:FocusNode#34b25
│ │ │   上下文:EditableText-[LabeledGlobalKey#7c822]
│ │ │
│ │ └─子3:FocusNode#72c3b
│ │     上下文:EditableText-[LabeledGlobalKey#f00bc]
│ │
│ └─子2:FocusNode#bdb17(FocusTraversalGroup[焦点路径中])
│   │ 背景:焦点
│   │ 不聚焦
│   │ 对焦路径
│   │
│   ├─子1:FocusNode#1b886([主焦点])
│   │   上下文:EditableText-[LabeledGlobalKey#c5a56]
│   │   主要焦点
│   │
│   ├─子2:FocusNode#61cd5
│   │   上下文:EditableText-[LabeledGlobalKey#a4dd8]
│   │
│   └─子3:FocusNode#02fac
│       上下文:EditableText-[LabeledGlobalKey#fe12d]
│
├─子2:FocusNode#4886e
│   背景:焦点
│
└─子3:FocusNode#9241b
背景:焦点

完美答案,关于使用
debugDumpFocusTree
的不错奖励
FocusTraversalGroup
主要是我需要的,您帮助我更好地理解了它的工作原理。除此之外,对于我的用例,我需要在聚焦时设置
TextField
的选择,因此我使用
skipTraversal:true
将TextField包装成
focuschange
,并在
onFocusChange
中设置控制器选择。谢谢你的回答,非常感谢!
    return Scaffold(
      appBar: AppBar(
        title: Text('Focus Tab Page'),
        actions: [
          IconButton(icon: Icon(Icons.info_outline), onPressed: debugDumpFocusTree)
        ],
      ),
└─Child 2: FocusScopeNode#c83f0(_ModalScopeState<dynamic> Focus Scope [IN FOCUS PATH])
  │ context: FocusScope
  │ IN FOCUS PATH
  │ focusedChildren: FocusScopeNode#7d536([IN FOCUS PATH])
  │
  ├─Child 1: FocusScopeNode#7d536([IN FOCUS PATH])
  │ │ context: FocusScope
  │ │ IN FOCUS PATH
  │ │ focusedChildren: FocusNode#1b886([PRIMARY FOCUS]),
  │ │   FocusNode#72c3b, FocusNode#34b25, FocusNode#3b410,
  │ │   FocusNode#02fac, FocusNode#61cd5
  │ │
  │ ├─Child 1: FocusNode#1d51e(FocusTraversalGroup)
  │ │ │ context: Focus
  │ │ │ NOT FOCUSABLE
  │ │ │
  │ │ ├─Child 1: FocusNode#3b410
  │ │ │   context: EditableText-[LabeledGlobalKey<EditableTextState>#70699]
  │ │ │
  │ │ ├─Child 2: FocusNode#34b25
  │ │ │   context: EditableText-[LabeledGlobalKey<EditableTextState>#7c822]
  │ │ │
  │ │ └─Child 3: FocusNode#72c3b
  │ │     context: EditableText-[LabeledGlobalKey<EditableTextState>#f00bc]
  │ │
  │ └─Child 2: FocusNode#bdb17(FocusTraversalGroup [IN FOCUS PATH])
  │   │ context: Focus
  │   │ NOT FOCUSABLE
  │   │ IN FOCUS PATH
  │   │
  │   ├─Child 1: FocusNode#1b886([PRIMARY FOCUS])
  │   │   context: EditableText-[LabeledGlobalKey<EditableTextState>#c5a56]
  │   │   PRIMARY FOCUS
  │   │
  │   ├─Child 2: FocusNode#61cd5
  │   │   context: EditableText-[LabeledGlobalKey<EditableTextState>#a4dd8]
  │   │
  │   └─Child 3: FocusNode#02fac
  │       context: EditableText-[LabeledGlobalKey<EditableTextState>#fe12d]
  │
  ├─Child 2: FocusNode#4886e
  │   context: Focus
  │
  └─Child 3: FocusNode#9241b
      context: Focus