drawLabels method

  1. @override
void drawLabels()
override

Implementation

@override
void drawLabels() {
  _labelElem.innerHTML = ''.toJS;

  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 gridR = (r - gridLineWidth - textMargin/4 - maxLabelWidth)*0.6;

  double totalRadii = 0;
  for (var dpe in _dataPoints.entries) {
    var dataRadii = 2*pi*dpe.value;
    var area = 2*pi*r*r*dpe.value;
    // Only draw label if area is enough
    if (area > 5000) {
      var labelRadii = dataRadii/2;
      var p = [gridR*sin(totalRadii + labelRadii) + r + dx, gridR*cos(totalRadii + labelRadii) + r + dy];

      _labelElem.insertAdjacentHTML('beforeend', '<text x="${p[0]}" y="${p[1]}" style="font: $labelFontStyle;fill: $labelFillStyle;text-anchor: middle;dominant-baseline: middle;">${_nf.format(dpe.value)}</text>'.toJS);
    }

    totalRadii += dataRadii;
  }
}