createA11yNodes method
Returns a list of A11yNodes for this chart.
Implementation
@override
List<A11yNode> createA11yNodes() {
  final nodes = <_DomainA11yNode>[];
  // Update the selection model when the a11y node has focus.
  final selectionModel = _chart.getSelectionModel(SelectionModelType.info);
  final domainSeriesDatum = <D, List<SeriesDatum<D>>>{};
  for (final series in _seriesList) {
    for (var index = 0; index < series.data.length; index++) {
      final Object? datum = series.data[index];
      final domain = series.domainFn(index);
      domainSeriesDatum[domain] ??= <SeriesDatum<D>>[];
      domainSeriesDatum[domain]!.add(SeriesDatum<D>(series, datum));
    }
  }
  domainSeriesDatum.forEach((D domain, List<SeriesDatum<D>> seriesDatums) {
    final a11yDescription = _vocalizationCallback(seriesDatums);
    final firstSeries = seriesDatums.first.series;
    final domainAxis = firstSeries.getAttr(domainAxisKey) as ImmutableAxis<D>;
    final location = domainAxis.getLocation(domain)!;
    /// If the step size is smaller than the minimum width, use minimum.
    final stepSize = (domainAxis.stepSize > minimumWidth)
        ? domainAxis.stepSize
        : minimumWidth;
    nodes.add(_DomainA11yNode(a11yDescription,
        location: location,
        stepSize: stepSize,
        chartDrawBounds: _chart.drawAreaBounds,
        isRtl: _chart.context.isRtl,
        renderVertically: _chart.vertical,
        onFocus: () => selectionModel.updateSelection(seriesDatums, [])));
  });
  // The screen reader navigates the nodes based on the order it is returned.
  // So if the chart is RTL, then the nodes should be ordered with the right
  // most domain first.
  //
  // If the chart has multiple series and one series is missing the domain
  // and it was added later, we still want the domains to be in order.
  nodes.sort();
  return nodes;
}