findAnnotations<S extends Object> method
- AnnotationResult<
S> result, - Offset localPosition, {
- required bool onlyFirst,
Searches the subtree for annotations of type S
at the location
localPosition
, then adds the annotation value if applicable.
This method always searches its children, and if any child returns true
,
the remaining children are skipped. Regardless of what the children
return, this method then adds this layer's annotation if all of the
following restrictions are met:
- The target type must be identical to the annotated type
T
. - If size is provided, the target position must be contained within the rectangle formed by size and offset.
This search process respects onlyFirst
, meaning that when onlyFirst
is
true, the search will stop when it finds the first annotation from the
children, and the layer's own annotation is checked only when none is
given by the children.
The return value is true if any child returns true
, or if opaque is
true and the layer's annotation is added.
For explanation of layer annotations, parameters and return value, refer to Layer.findAnnotations.
Implementation
@override
bool findAnnotations<S extends Object>(AnnotationResult<S> result, Offset localPosition, { required bool onlyFirst }) {
bool isAbsorbed = super.findAnnotations(result, localPosition, onlyFirst: onlyFirst);
if (result.entries.isNotEmpty && onlyFirst) {
return isAbsorbed;
}
if (size != null && !(offset & size!).contains(localPosition)) {
return isAbsorbed;
}
if (T == S) {
isAbsorbed = isAbsorbed || opaque;
final Object untypedValue = value;
final S typedValue = untypedValue as S;
result.add(AnnotationEntry<S>(
annotation: typedValue,
localPosition: localPosition - offset,
));
}
return isAbsorbed;
}