@@ -27,6 +27,8 @@ class ChartPainter extends CustomPainter {
2727 // Draw time labels (dates) & price labels
2828 _drawTimeLabels (canvas, params);
2929 _drawPriceGridAndLabels (canvas, params);
30+ _drawCurrentPriceLabel (canvas, params);
31+ _drawCurrentPriceLine (canvas, params);
3032
3133 // Draw prices, volumes & trend line
3234 canvas.save ();
@@ -107,6 +109,65 @@ class ChartPainter extends CustomPainter {
107109 });
108110 }
109111
112+ void _drawCurrentPriceLabel (
113+ Canvas canvas,
114+ PainterParams params,
115+ ) {
116+ final currentPrice = params.currentPrice;
117+ if (currentPrice == null ) {
118+ return ;
119+ }
120+ final priceTp = TextPainter (
121+ text: TextSpan (
122+ text: getPriceLabel (currentPrice),
123+ style: params.style.currentPriceStyle.labelStyle,
124+ ),
125+ )
126+ ..textDirection = TextDirection .ltr
127+ ..layout ();
128+
129+ final dx = params.chartWidth + 4 ;
130+ final dy =
131+ params.fitPrice (currentPrice).clamp (0 , params.chartHeight).toDouble () -
132+ priceTp.height / 2 ;
133+
134+ final padding = params.style.currentPriceStyle.rectPadding;
135+ final radius = params.style.currentPriceStyle.rectRadius;
136+ final rectColor = params.style.currentPriceStyle.rectColor;
137+
138+ final rect = Rect .fromLTWH (
139+ dx, dy, priceTp.width + 2 * padding, priceTp.height + 2 * padding);
140+ final rrect = RRect .fromRectAndRadius (rect, Radius .circular (radius));
141+ canvas.drawRRect (rrect, Paint ()..color = rectColor);
142+
143+ priceTp.paint (canvas, Offset (dx + padding, dy + padding));
144+ }
145+
146+ void _drawCurrentPriceLine (Canvas canvas, PainterParams params) {
147+ final currentPrice = params.currentPrice;
148+ if (currentPrice == null ) {
149+ return ;
150+ }
151+ final paint = Paint ()
152+ ..color = Colors .red
153+ ..strokeWidth = 1
154+ ..style = PaintingStyle .stroke;
155+
156+ final dashWidth = 4.0 ;
157+ final dashSpace = 2.0 ;
158+ double startX = 0 ;
159+ final clampedPrice =
160+ params.fitPrice (currentPrice).clamp (0 , params.chartHeight).toDouble ();
161+ while (startX < params.chartWidth) {
162+ canvas.drawLine (
163+ Offset (startX, clampedPrice),
164+ Offset (startX + dashWidth, clampedPrice),
165+ paint,
166+ );
167+ startX += dashWidth + dashSpace;
168+ }
169+ }
170+
110171 void _drawSingleDay (canvas, PainterParams params, int i) {
111172 final candle = params.candles[i];
112173 final x = i * params.candleWidth;
0 commit comments