updateNode method
Update the information associated with the node with the given id
.
The semantics nodes form a tree, with the root of the tree always having
an id of zero. The childrenInTraversalOrder
and childrenInHitTestOrder
are the ids of the nodes that are immediate children of this node. The
former enumerates children in traversal order, and the latter enumerates
the same children in the hit test order. The two lists must have the same
length and contain the same ids. They may only differ in the order the
ids are listed in. For more information about different child orders, see
DebugSemanticsDumpOrder
.
The system retains the nodes that are currently reachable from the root. A given update need not contain information for nodes that do not change in the update. If a node is not reachable from the root after an update, the node will be discarded from the tree.
The flags
are a bit field of SemanticsFlags that apply to this node.
The actions
are a bit field of SemanticsActions that can be undertaken
by this node. If the user wishes to undertake one of these actions on this
node, the Window.onSemanticsAction will be called with id
and one of
the possible SemanticsActions. Because the semantics tree is maintained
asynchronously, the Window.onSemanticsAction callback might be called
with an action that is no longer possible.
The label
is a string that describes this node. The value
property
describes the current value of the node as a string. The increasedValue
string will become the value
string after a SemanticsAction.increase
action is performed. The decreasedValue
string will become the value
string after a SemanticsAction.decrease action is performed. The hint
string describes what result an action performed on this node has. The
reading direction of all these strings is given by textDirection
.
The fields textSelectionBase
and textSelectionExtent
describe the
currently selected text within value
.
The field maxValueLength
is used to indicate that an editable text field
has a limit on the number of characters entered. If it is -1 there is
no limit on the number of characters entered. The field
currentValueLength
indicates how much of that limit has already been
used up. When maxValueLength
is set, currentValueLength
must also be
set.
The field platformViewId
references the platform view, whose semantics
nodes will be added as children to this node. If a platform view is
specified, childrenInHitTestOrder
and childrenInTraversalOrder
must be
empty.
For scrollable nodes scrollPosition
describes the current scroll
position in logical pixel. scrollExtentMax
and scrollExtentMin
describe the maximum and minimum in-rage values that scrollPosition
can
be. Both or either may be infinity to indicate unbound scrolling. The
value for scrollPosition
can (temporarily) be outside this range, for
example during an overscroll. scrollChildren
is the count of the
total number of child nodes that contribute semantics and scrollIndex
is the index of the first visible child node that contributes semantics.
The rect
is the region occupied by this node in its own coordinate
system.
The transform
is a matrix that maps this node's coordinate system into
its parent's coordinate system.
The elevation
describes the distance in z-direction between this node
and the elevation
of the parent.
The thickness
describes how much space this node occupies in the
z-direction starting at elevation
. Basically, in the z-direction the
node starts at elevation
above the parent and ends at elevation
+
thickness
above the parent.
Implementation
void updateNode({
int id,
int flags,
int actions,
int maxValueLength,
int currentValueLength,
int textSelectionBase,
int textSelectionExtent,
int platformViewId,
int scrollChildren,
int scrollIndex,
double scrollPosition,
double scrollExtentMax,
double scrollExtentMin,
double elevation,
double thickness,
Rect rect,
String label,
String hint,
String value,
String increasedValue,
String decreasedValue,
TextDirection textDirection,
Float64List transform,
Int32List childrenInTraversalOrder,
Int32List childrenInHitTestOrder,
Int32List additionalActions,
}) {
assert(_matrix4IsValid(transform));
assert(
scrollChildren == 0 || scrollChildren == null || (scrollChildren > 0 && childrenInHitTestOrder != null),
'If a node has scrollChildren, it must have childrenInHitTestOrder',
);
_updateNode(
id,
flags,
actions,
maxValueLength,
currentValueLength,
textSelectionBase,
textSelectionExtent,
platformViewId,
scrollChildren,
scrollIndex,
scrollPosition,
scrollExtentMax,
scrollExtentMin,
rect.left,
rect.top,
rect.right,
rect.bottom,
elevation,
thickness,
label,
hint,
value,
increasedValue,
decreasedValue,
textDirection != null ? textDirection.index + 1 : 0,
transform,
childrenInTraversalOrder,
childrenInHitTestOrder,
additionalActions,
);
}