我阅读了有关以下内容的文档:
但仍然不清楚何时应该使用forceActiveFocus()方法将focus属性设置为 true,反之亦然。
der*_*erM 11
正如文档所述:
对于非常简单的情况,有时只需设置 focus 属性就足够了。
这种简单的情况是,如果Itemwhich getsfocus: true没有被 a 包围FocusScope,则可能没有焦点。
然后它继续:
> 在每个焦点范围内,一个对象可能将 Item::focus 设置为 true。如果多个 Item 设置了 focus 属性,则最后一个设置焦点的类型将获得焦点,其他类型未设置,类似于没有焦点范围时。
> 当焦点范围接收到活动焦点时,具有焦点集的包含类型(如果有)也会获得活动焦点。如果此类型也是 FocusScope,则代理行为将继续。焦点范围和子焦点项都将设置 activeFocus 属性。
从我们了解到的事实是设置focus: true是不够的,如果它Item是 a 的后继者,FocusScope因为这FocusScope将需要activeFocussu 后继者Item将收到activeFocus。这是递归的,并且意味着FocusScope将需要具有focus: true并且可能的前驱FocusScope需要activeFocus等等。这导致某种 焦点树
这个焦点树组成了内部节点属于FocusScopeS和叶子是Item秒。AFocusScope可能是一片叶子,但我不知道为什么它应该是。
在此树中,每个FocusScope可具有最多一个子节点(无论是Item(叶)或FocusScope(内节点具有)focus === true。遍历这个树中,其中所有遍历节点具有路径以下focus === true所遍历的节点具有也activeFocus === true作为每个FocusScope可以仅具有最多一个子节点与focus === true只有一个这样的路径。
Column {
FocusScope {
focus: false
width: 100
height: 100
Text {
focus: true
text: 'has focus ' + focus + '\nhas activeFocus ' + activeFocus
}
}
FocusScope {
focus: true
width: 100
height: 100
Text {
focus: true
text: 'has focus ' + focus + '\nhas activeFocus ' + activeFocus
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里我们有两个FocusScopes。两者都有一个有 的孩子focus,但由于只有第二个FocusScope有focus本身,它的孩子有activeFocus。
采用forceActiveFocus()遍历焦点树,套focus到 true了在路上的每个节点,因此Item具有activeFocus在最后。
| 归档时间: |
|
| 查看次数: |
11205 次 |
| 最近记录: |