drawGroupLabels method

  1. @override
List<MarkElement<ElementStyle>> drawGroupLabels(
  1. List<Attributes> group,
  2. CoordConv coord,
  3. Offset origin
)
override

Renders label elements of all tuples of a group.

Implementation

@override
List<MarkElement> drawGroupLabels(
    List<Attributes> group, CoordConv coord, Offset origin) {
  final rst = <MarkElement>[];

  if (coord is RectCoordConv) {
    // Bar and histogram.

    for (var item in group) {
      bool nan = false;
      for (var point in item.position) {
        if (!point.dy.isFinite) {
          nan = true;
          break;
        }
      }
      if (!nan && item.label != null) {
        final start = coord.convert(item.position[0]);
        final end = coord.convert(item.position[1]);
        rst.add(_drawRectLabel(
          item,
          start + (end - start) * (item.shape as RectShape).labelPosition,
          coord,
        ));
      }
    }
  } else if (coord is PolarCoordConv) {
    // All sector interval shapes dosen't allow NaN value.

    if (coord.transposed) {
      if (coord.dimCount == 1) {
        // Pie.

        for (var item in group) {
          if (item.label != null) {
            final position = item.position;
            rst.add(_drawSectorLabel(
              item,
              coord.convert(Offset(
                (item.shape as RectShape).labelPosition,
                (position[1].dy + position[0].dy) / 2,
              )),
              coord,
            ));
          }
        }
      } else {
        // Race track.

        for (var item in group) {
          if (item.label != null && item.label!.haveText) {
            final position = item.position;
            final labelAnchor = coord.convert(position[0] +
                (position[1] - position[0]) *
                    (item.shape as RectShape).labelPosition);
            final anchorOffset = labelAnchor - coord.center;
            rst.add(LabelElement(
              text: item.label!.text!,
              anchor: labelAnchor,
              defaultAlign: radialLabelAlign(anchorOffset) * -1,
              style: item.label!.style,
              tag: item.tag,
            ));
          }
        }
      }
    } else {
      // Bull eye and rose.

      for (var item in group) {
        if (item.label != null) {
          rst.add(_drawSectorLabel(
              item,
              coord.convert(item.position[0] +
                  (item.position[1] - item.position[0]) *
                      (item.shape as RectShape).labelPosition),
              coord));
        }
      }
    }
  }

  return rst;
}