componentsAtLocation<T>  method 
- T locationContext,
- List<T> ? nestedContexts,
- T? transformContext(),
- bool checkContains(- Component,
- T
 
This is a generic implementation of componentsAtPoint; refer to those docs for context.
This will find components intersecting a given location context T. The
context can be a single point or a more complicated structure. How to
interpret the structure T is determined by the provided lambdas,
transformContext and checkContains.
A simple choice of T would be a simple point (i.e. Vector2). In that case
transformContext needs to be able to transform a Vector2 on the parent
coordinate space into the coordinate space of a provided
CoordinateTransform; and checkContains must be able to determine if
a given Component "contains" the Vector2 (the definition of "contains"
will vary and shall be determined by the nature of the chosen location
context T).
Implementation
Iterable<Component> componentsAtLocation<T>(
  T locationContext,
  List<T>? nestedContexts,
  T? Function(CoordinateTransform, T) transformContext,
  bool Function(Component, T) checkContains,
) sync* {
  nestedContexts?.add(locationContext);
  if (_children != null) {
    for (final child in _children!.reversed()) {
      if (child is IgnoreEvents && child.ignoreEvents) {
        continue;
      }
      T? childPoint = locationContext;
      if (child is CoordinateTransform) {
        childPoint = transformContext(
          child as CoordinateTransform,
          locationContext,
        );
      }
      if (childPoint != null) {
        yield* child.componentsAtLocation(
          childPoint,
          nestedContexts,
          transformContext,
          checkContains,
        );
      }
    }
  }
  final shouldIgnoreEvents =
      this is IgnoreEvents && (this as IgnoreEvents).ignoreEvents;
  if (checkContains(this, locationContext) && !shouldIgnoreEvents) {
    yield this;
  }
  nestedContexts?.removeLast();
}