paint method

  1. @override
void paint(
  1. Canvas canvas,
  2. ValueInCanvasProvider xInCanvasProvider,
  3. ValueInCanvasProvider yInCanvasProvider,
  4. CandlestickSpot spot,
  5. int spotIndex,
)
override

This method should be overridden to draw the candlestick shape

Implementation

@override
void paint(
  Canvas canvas,
  ValueInCanvasProvider xInCanvasProvider,
  ValueInCanvasProvider yInCanvasProvider,
  CandlestickSpot spot,
  int spotIndex,
) {
  final style = candlestickStyleProvider(spot, spotIndex);

  final xOffsetInCanvas = xInCanvasProvider(spot.x);
  final openYOffsetInCanvas = yInCanvasProvider(spot.open);
  final highYOffsetInCanvas = yInCanvasProvider(spot.high);
  final lowOYOffsetInCanvas = yInCanvasProvider(spot.low);
  final closeYOffsetInCanvas = yInCanvasProvider(spot.close);

  final bodyHighCanvas = min(openYOffsetInCanvas, closeYOffsetInCanvas);
  final bodyLowCanvas = max(openYOffsetInCanvas, closeYOffsetInCanvas);

  if (style.lineWidth > 0 && style.lineColor.a > 0) {
    canvas
      // Bottom line
      ..drawLine(
        Offset(xOffsetInCanvas, lowOYOffsetInCanvas),
        Offset(xOffsetInCanvas, bodyLowCanvas),
        _linePainter
          ..color = style.lineColor
          ..strokeWidth = style.lineWidth,
      )
      // Top line
      ..drawLine(
        Offset(xOffsetInCanvas, highYOffsetInCanvas),
        Offset(xOffsetInCanvas, bodyHighCanvas),
        _linePainter
          ..color = style.lineColor
          ..strokeWidth = style.lineWidth,
      );
  }

  // Body
  final bodyRect = Rect.fromLTRB(
    xOffsetInCanvas - style.bodyWidth / 2,
    bodyHighCanvas,
    xOffsetInCanvas + style.bodyWidth / 2,
    bodyLowCanvas,
  );
  if (style.bodyFillColor.a > 0 && style.bodyWidth > 0) {
    canvas.drawRRect(
      RRect.fromRectAndRadius(
        bodyRect,
        Radius.circular(style.bodyRadius),
      ),
      _bodyPainter
        ..color = style.bodyFillColor
        ..style = PaintingStyle.fill,
    );
  }
  if (style.bodyStrokeWidth > 0 && style.bodyStrokeColor.a > 0) {
    canvas.drawRRect(
      RRect.fromRectAndRadius(
        bodyRect,
        Radius.circular(style.bodyRadius),
      ),
      _bodyStrokePainter
        ..color = style.bodyStrokeColor
        ..strokeWidth = style.bodyStrokeWidth
        ..style = PaintingStyle.stroke,
    );
  }
}