drawLabels method

  1. @override
void drawLabels()
override

Implementation

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

  var labelCountX = keys.length;
  var labelCountY = getLabelCountY();
  var labelMinPxX = gridMinPxX + max(barWidth, maxLabelWidthX)/2;
  var labelMaxPxX = gridMaxPxX - max(barWidth, maxLabelWidthX)/2;
  var rangeX  = labelMaxPxX - labelMinPxX;
  var rangeY = gridMaxPxY - gridMinPxY;

  var minY = getLabelMinY();
  var maxY = getLabelMaxY();

  var spaceX = rangeX/(labelCountX-1);
  var spaceY = rangeY/(labelCountY-1);
  var intervalY = (maxY - minY)/(labelCountY-1);

  List<String> texts = [];
  for (var i = 0; i < labelCountY; i++) {
    texts.add('<text x="${gridMinPxX - textMargin}" y="${gridMinPxY + spaceY*i}" style="font: $labelFontStyle;fill: $labelFillStyle;text-anchor: end;dominant-baseline: middle;">${labelFormatY(maxY - intervalY*i)}</text>');
  }

  if (labelCountX >= 2) {
    var i = 0;
    for (var x in keys) {
      texts.add('<text x="${labelMinPxX + spaceX*i}" y="${gridMaxPxY + textMargin}" style="font: $labelFontStyle;fill: $labelFillStyle;text-anchor: middle;dominant-baseline: text-top;">$x</text>');
      i++;
    }
  } else {
    for (var x in keys) {
      texts.add('<text x="${(labelMaxPxX - labelMinPxX)/2}" y="${gridMaxPxY + textMargin}" style="font: $labelFontStyle;fill: $labelFillStyle;text-anchor: middle;dominant-baseline: hanging;">$x</text>');
    }
  }

  _labelElem.innerHTML = texts.join().toJS;
}