drawInnerCircle method

dynamic drawInnerCircle(
  1. Canvas canvas,
  2. Size size
)

绘制内圈圆 || 内多边形、分割线 || 绘制文字

Implementation

drawInnerCircle(Canvas canvas, Size size) {
  double innerRadius = radarMap.radius; // 内圆半径
  var line = radarMap.line;
  int ring = line?.line??1;
  Color ringColor = line?.color??Colors.grey;
  if (radarMap.shape == Shape.circle) {
    /// 绘制五个圆环
    for (int s = ring; s > 0; s--) {
      canvas.drawCircle(
        const Offset(0, 0),
        innerRadius / ring * s,
        mLinePaint
          ..color = ringColor
          ..style = PaintingStyle.stroke,
      );
    }
  } else {
    /// 绘制五个方环

    ///均分圆的度数
    double delta = 2 * pi / elementLength;
    for (int s = ring; s > 0; s--) {
      ///起始位置
      var startRa = innerRadius/ring * s;

      Path mapPath = Path();
      ///角度
      double angle = 0;
      mapPath.moveTo(0, -startRa);
      for (int i = 0; i < elementLength; i++) {
        angle += delta;
        mapPath.lineTo(0 + startRa * sin(angle), 0 - startRa * cos(angle));
      }
      mapPath.close();
      canvas.drawPath(
        mapPath,
        mLinePaint
          ..color = ringColor
          ..style = PaintingStyle.stroke,
      );
    }

  }
  // 图上画文字
  if(lineText!=null){
    // (s/ring).toStringAsFixed(2)
    var maxWidth = 100.0;
    for (int s = ring; s > 0; s--) {
      ///起始位置
      var startRa = innerRadius/ring * s - radarMap.radius * 0.05;
      Offset offset = Offset(-maxWidth/2, -startRa);
      // fontSize: textStyle!.fontSize ?? radarMap.radius * 0.16,


      final paragraphBuilder = ui.ParagraphBuilder(ui.ParagraphStyle(
          textAlign: TextAlign.center,
          fontSize: line?.textFontSize ?? radarMap.radius * 0.1,
          fontWeight: FontWeight.normal));
      paragraphBuilder.pushStyle(ui.TextStyle(color: line?.textColor??Colors.black , textBaseline: ui.TextBaseline.alphabetic));
      paragraphBuilder.addText(lineText!.call(s,ring));
      var paragraph = paragraphBuilder.build();
      paragraph.layout(ui.ParagraphConstraints(width: maxWidth));
      canvas.drawParagraph(paragraph, offset);

    }
  }


  // 遍历画线
  for (var i = 0; i < elementLength; i++) {
    canvas.save();
    canvas.rotate(360 / elementLength * i.toDouble() / 180 * pi);
    mLinePath.moveTo(0, -innerRadius);
    mLinePath.relativeLineTo(0, innerRadius); //线的路径
    canvas.drawPath(
        mLinePath,
        mLinePaint
          ..color = ringColor
          ..style = PaintingStyle.stroke); //绘制线
    canvas.restore();
  }


  canvas.save();
  canvas.restore();
}