@@ -61,7 +61,9 @@ void _calculateDataLabelPosition(
61
61
? point.upperQuartile!
62
62
: point.lowerQuartile! ;
63
63
}
64
- // ignore: prefer_final_fields
64
+ // ignore: prefer_final_locals
65
+ List <String > labelList = < String > [];
66
+ // ignore: prefer_final_locals
65
67
String label = point.dataLabelMapper ??
66
68
point.label ??
67
69
_getLabelText (
@@ -76,11 +78,63 @@ void _calculateDataLabelPosition(
76
78
seriesRenderer);
77
79
if (isRangeSeries) {
78
80
point.label2 = point.dataLabelMapper ??
81
+ point.label2 ??
79
82
_getLabelText (! inversed ? point.low : point.high, seriesRenderer);
83
+ if (seriesRenderer._seriesType == 'hiloopenclose' ||
84
+ seriesRenderer._seriesType.contains ('candle' )) {
85
+ point.label3 = point.dataLabelMapper ??
86
+ point.label3 ??
87
+ _getLabelText (
88
+ (point.open > point.close) == true
89
+ ? ! inversed
90
+ ? point.close
91
+ : point.open
92
+ : ! inversed
93
+ ? point.open
94
+ : point.close,
95
+ seriesRenderer);
96
+ point.label4 = point.dataLabelMapper ??
97
+ point.label4 ??
98
+ _getLabelText (
99
+ (point.open > point.close) == true
100
+ ? ! inversed
101
+ ? point.open
102
+ : point.close
103
+ : ! inversed
104
+ ? point.close
105
+ : point.open,
106
+ seriesRenderer);
107
+ }
80
108
} else if (isBoxSeries) {
81
109
point.label2 = point.dataLabelMapper ??
110
+ point.label2 ??
82
111
_getLabelText (
83
112
! inversed ? point.minimum : point.maximum, seriesRenderer);
113
+ point.label3 = point.dataLabelMapper ??
114
+ point.label3 ??
115
+ _getLabelText (
116
+ point.lowerQuartile! > point.upperQuartile!
117
+ ? ! inversed
118
+ ? point.upperQuartile
119
+ : point.lowerQuartile
120
+ : ! inversed
121
+ ? point.lowerQuartile
122
+ : point.upperQuartile,
123
+ seriesRenderer);
124
+ point.label4 = point.dataLabelMapper ??
125
+ point.label4 ??
126
+ _getLabelText (
127
+ point.lowerQuartile! > point.upperQuartile!
128
+ ? ! inversed
129
+ ? point.lowerQuartile
130
+ : point.upperQuartile
131
+ : ! inversed
132
+ ? point.upperQuartile
133
+ : point.lowerQuartile,
134
+ seriesRenderer);
135
+ point.label5 = point.dataLabelMapper ??
136
+ point.label5 ??
137
+ _getLabelText (point.median, seriesRenderer);
84
138
}
85
139
DataLabelRenderArgs dataLabelArgs;
86
140
TextStyle ? dataLabelStyle = dataLabelSettingsRenderer._textStyle;
@@ -91,21 +145,37 @@ void _calculateDataLabelPosition(
91
145
dataLabelStyle = dataLabelSettingsRenderer._originalStyle;
92
146
if (chart.onDataLabelRender != null &&
93
147
! seriesRenderer._visibleDataPoints! [index].labelRenderEvent) {
148
+ labelList.add (label);
149
+ if (isRangeSeries) {
150
+ labelList.add (point.label2! );
151
+ if (seriesRenderer._seriesType == 'hiloopenclose' ||
152
+ seriesRenderer._seriesType.contains ('candle' )) {
153
+ labelList.add (point.label3! );
154
+ labelList.add (point.label4! );
155
+ }
156
+ } else if (isBoxSeries) {
157
+ labelList.add (point.label2! );
158
+ labelList.add (point.label3! );
159
+ labelList.add (point.label4! );
160
+ labelList.add (point.label5! );
161
+ }
94
162
seriesRenderer._visibleDataPoints! [index].labelRenderEvent = true ;
95
- dataLabelArgs = DataLabelRenderArgs (
96
- seriesRenderer._series,
97
- seriesRenderer._dataPoints,
98
- index,
99
- seriesRenderer._visibleDataPoints! [index].overallDataPointIndex);
100
- dataLabelArgs.text = label;
101
- dataLabelArgs.textStyle = dataLabelStyle! ;
102
- dataLabelArgs.color = seriesRenderer._series.dataLabelSettings.color;
103
- chart.onDataLabelRender !(dataLabelArgs);
104
- label = point.label = dataLabelArgs.text;
105
- index = dataLabelArgs.pointIndex! ;
106
- point._dataLabelStyle = dataLabelArgs.textStyle;
107
- point._dataLabelColor = dataLabelArgs.color;
108
- dataLabelSettingsRenderer._offset = dataLabelArgs.offset;
163
+ for (int i = 0 ; i < labelList.length; i++ ) {
164
+ dataLabelArgs = DataLabelRenderArgs (
165
+ seriesRenderer._series,
166
+ seriesRenderer._dataPoints,
167
+ index,
168
+ seriesRenderer._visibleDataPoints! [index].overallDataPointIndex);
169
+ dataLabelArgs.text = labelList[i];
170
+ dataLabelArgs.textStyle = dataLabelStyle! ;
171
+ dataLabelArgs.color = seriesRenderer._series.dataLabelSettings.color;
172
+ chart.onDataLabelRender !(dataLabelArgs);
173
+ labelList[i] = dataLabelArgs.text;
174
+ index = dataLabelArgs.pointIndex! ;
175
+ point._dataLabelStyle = dataLabelArgs.textStyle;
176
+ point._dataLabelColor = dataLabelArgs.color;
177
+ dataLabelSettingsRenderer._offset = dataLabelArgs.offset;
178
+ }
109
179
}
110
180
dataLabelSettingsRenderer._textStyle = dataLabelStyle;
111
181
if (chart.onDataLabelRender != null ) {
@@ -159,7 +229,7 @@ void _calculateDataLabelPosition(
159
229
fontWeight: FontWeight .normal,
160
230
fontSize: 12 )
161
231
: dataLabelStyle! ;
162
- point.label = label;
232
+ point.label = labelList.isNotEmpty ? labelList[ 0 ] : label;
163
233
if (label.isNotEmpty) {
164
234
_ChartLocation ? chartLocation,
165
235
chartLocation2,
@@ -170,6 +240,7 @@ void _calculateDataLabelPosition(
170
240
dataLabel.builder == null ? measureText (label, font) : templateSize! ;
171
241
chartLocation = _ChartLocation (markerPointX, markerPointY);
172
242
if (isRangeSeries || isBoxSeries) {
243
+ point.label2 = labelList.isNotEmpty ? labelList[1 ] : point.label2;
173
244
textSize2 = dataLabel.builder == null
174
245
? measureText (point.label2! , font)
175
246
: templateSize! ;
@@ -251,49 +322,54 @@ void _calculateDataLabelPosition(
251
322
seriesRenderer._seriesType.contains ('candle' ) ||
252
323
isBoxSeries) {
253
324
if (! isBoxSeries) {
254
- point.label3 = point.dataLabelMapper ??
255
- _getLabelText (
256
- (point.open > point.close) == true
257
- ? ! inversed
258
- ? point.close
259
- : point.open
260
- : ! inversed
261
- ? point.open
262
- : point.close,
263
- seriesRenderer);
264
- point.label4 = point.dataLabelMapper ??
265
- _getLabelText (
266
- (point.open > point.close) == true
267
- ? ! inversed
268
- ? point.open
269
- : point.close
270
- : ! inversed
271
- ? point.close
272
- : point.open,
273
- seriesRenderer);
325
+ point.label3 = labelList.isNotEmpty ? labelList[2 ] : point.label3;
326
+ point.label4 = labelList.isNotEmpty ? labelList[3 ] : point.label4;
327
+ // point.label3 = point.dataLabelMapper ??
328
+ // _getLabelText(
329
+ // (point.open > point.close) == true
330
+ // ? !inversed
331
+ // ? point.close
332
+ // : point.open
333
+ // : !inversed
334
+ // ? point.open
335
+ // : point.close,
336
+ // seriesRenderer);
337
+ // point.label4 = point.dataLabelMapper ??
338
+ // _getLabelText(
339
+ // (point.open > point.close) == true
340
+ // ? !inversed
341
+ // ? point.open
342
+ // : point.close
343
+ // : !inversed
344
+ // ? point.close
345
+ // : point.open,
346
+ // seriesRenderer);
274
347
} else {
275
- point.label3 = point.dataLabelMapper ??
276
- _getLabelText (
277
- point.lowerQuartile! > point.upperQuartile!
278
- ? ! inversed
279
- ? point.upperQuartile
280
- : point.lowerQuartile
281
- : ! inversed
282
- ? point.lowerQuartile
283
- : point.upperQuartile,
284
- seriesRenderer);
285
- point.label4 = point.dataLabelMapper ??
286
- _getLabelText (
287
- point.lowerQuartile! > point.upperQuartile!
288
- ? ! inversed
289
- ? point.lowerQuartile
290
- : point.upperQuartile
291
- : ! inversed
292
- ? point.upperQuartile
293
- : point.lowerQuartile,
294
- seriesRenderer);
295
- point.label5 = point.dataLabelMapper ??
296
- _getLabelText (point.median, seriesRenderer);
348
+ point.label3 = labelList.isNotEmpty ? labelList[2 ] : point.label3;
349
+ point.label4 = labelList.isNotEmpty ? labelList[3 ] : point.label4;
350
+ point.label5 = labelList.isNotEmpty ? labelList[4 ] : point.label5;
351
+ // point.label3 = point.dataLabelMapper ??
352
+ // _getLabelText(
353
+ // point.lowerQuartile! > point.upperQuartile!
354
+ // ? !inversed
355
+ // ? point.upperQuartile
356
+ // : point.lowerQuartile
357
+ // : !inversed
358
+ // ? point.lowerQuartile
359
+ // : point.upperQuartile,
360
+ // seriesRenderer);
361
+ // point.label4 = point.dataLabelMapper ??
362
+ // _getLabelText(
363
+ // point.lowerQuartile! > point.upperQuartile!
364
+ // ? !inversed
365
+ // ? point.lowerQuartile
366
+ // : point.upperQuartile
367
+ // : !inversed
368
+ // ? point.upperQuartile
369
+ // : point.lowerQuartile,
370
+ // seriesRenderer);
371
+ // point.label5 = point.dataLabelMapper ??
372
+ // _getLabelText(point.median, seriesRenderer);
297
373
}
298
374
textSize3 = dataLabel.builder == null
299
375
? measureText (point.label3! , font)
@@ -1157,7 +1233,6 @@ void _drawDataLabel(
1157
1233
final String ? label = point.label;
1158
1234
dataLabelStyle = dataLabelSettingsRenderer._textStyle;
1159
1235
if (label != null &&
1160
- label.isNotEmpty &&
1161
1236
// ignore: unnecessary_null_comparison
1162
1237
point != null &&
1163
1238
point.isVisible &&
@@ -1329,14 +1404,28 @@ void _drawDataLabelRectAndText(
1329
1404
}
1330
1405
canvas.translate (- point.dataLabelRegion! .center.dx,
1331
1406
- point.dataLabelRegion! .center.dy - y);
1332
- canvas.drawPath (path, strokePaint);
1407
+ if (point.label! .isNotEmpty) {
1408
+ canvas.drawPath (path, strokePaint);
1409
+ }
1333
1410
canvas.restore ();
1334
1411
if (isRangeSeries || isBoxSeries) {
1335
- canvas.drawPath (path2, strokePaint);
1336
- canvas.drawPath (path3, strokePaint);
1337
- canvas.drawPath (path4, strokePaint);
1412
+ if (point.label2! .isNotEmpty) {
1413
+ canvas.drawPath (path2, strokePaint);
1414
+ }
1415
+ if (seriesRenderer._seriesType == 'hiloopenclose' ||
1416
+ seriesRenderer._seriesType.contains ('candle' ) ||
1417
+ isBoxSeries) {
1418
+ if (point.label3! .isNotEmpty) {
1419
+ canvas.drawPath (path3, strokePaint);
1420
+ }
1421
+ if (point.label4! .isNotEmpty) {
1422
+ canvas.drawPath (path4, strokePaint);
1423
+ }
1424
+ }
1338
1425
if (isBoxSeries) {
1339
- canvas.drawPath (path5, strokePaint);
1426
+ if (point.label5! .isNotEmpty) {
1427
+ canvas.drawPath (path5, strokePaint);
1428
+ }
1340
1429
}
1341
1430
}
1342
1431
}
@@ -1367,14 +1456,28 @@ void _drawDataLabelRectAndText(
1367
1456
}
1368
1457
canvas.translate (- point.dataLabelRegion! .center.dx,
1369
1458
- point.dataLabelRegion! .center.dy - y);
1370
- canvas.drawPath (path, paint);
1459
+ if (point.label! .isNotEmpty) {
1460
+ canvas.drawPath (path, paint);
1461
+ }
1371
1462
canvas.restore ();
1372
1463
if (isRangeSeries || isBoxSeries) {
1373
- canvas.drawPath (path2, paint);
1374
- canvas.drawPath (path3, paint);
1375
- canvas.drawPath (path4, paint);
1464
+ if (point.label2! .isNotEmpty) {
1465
+ canvas.drawPath (path2, paint);
1466
+ }
1467
+ if (seriesRenderer._seriesType == 'hiloopenclose' ||
1468
+ seriesRenderer._seriesType.contains ('candle' ) ||
1469
+ isBoxSeries) {
1470
+ if (point.label3! .isNotEmpty) {
1471
+ canvas.drawPath (path3, paint);
1472
+ }
1473
+ if (point.label4! .isNotEmpty) {
1474
+ canvas.drawPath (path4, paint);
1475
+ }
1476
+ }
1376
1477
if (isBoxSeries) {
1377
- canvas.drawPath (path5, paint);
1478
+ if (point.label5! .isNotEmpty) {
1479
+ canvas.drawPath (path5, paint);
1480
+ }
1378
1481
}
1379
1482
}
1380
1483
}
0 commit comments