drawLabels method

  1. @override
void drawLabels()
override

Implementation

@override
void drawLabels() {
  _labelElem.innerHTML = ''.toJS;
  if (points == 0) return;

  final radians = 2*pi/points.toDouble();
  var polygons = <List<double>>[];

  final r = min(_svgElem.clientWidth, _svgElem.clientHeight)/2;
  final dx = max(_svgElem.clientWidth/2 - r, 0);
  final dy = max(_svgElem.clientHeight/2 - r, 0);

  var labelR = r - textMargin/2 - maxLabelWidth/4;
  for (var i = 0; i < points; i++) {
    if (i == 0) {
      polygons.add([
        labelR*sin((radians*i)+pi) + r + dx,
        labelR*cos((radians*i)+pi) + r + dy + 10, // This brings the first top label closer to the chart, for optical correctness
      ]);
    } else {
      polygons.add([
        labelR*sin((radians*i)+pi) + r + dx,
        labelR*cos((radians*i)+pi) + r + dy,
      ]);
    }

  }

  var i = 0;
  for (var label in labels) {
    var p = polygons[i];
    _labelElem.insertAdjacentHTML('beforeend', '<text x="${p[0]}" y="${p[1]}" style="font: $labelFontStyle;fill: $labelFillStyle;text-anchor: middle;dominant-baseline: middle;">$label</text>'.toJS);
    i++;
  }
}