|
1 | 1 | import 'dart:math'; |
2 | 2 |
|
| 3 | +import 'package:flutter/material.dart'; |
3 | 4 | import 'package:flutter/widgets.dart'; |
4 | 5 |
|
5 | 6 | import 'candle_data.dart'; |
@@ -150,39 +151,44 @@ class ChartPainter extends CustomPainter { |
150 | 151 | ); |
151 | 152 | } |
152 | 153 | // Draw trend line |
153 | | - final trendLinePaint = Paint() |
154 | | - ..strokeWidth = 2.0 |
155 | | - ..strokeCap = StrokeCap.round |
156 | | - ..color = params.style.trendLineColor; |
157 | | - final pt = candle.trend; // current data point |
158 | | - final prevPt = params.candles.at(i - 1)?.trend; |
159 | | - if (pt != null && prevPt != null) { |
160 | | - canvas.drawLine( |
161 | | - Offset(x - params.candleWidth, params.fitPrice(prevPt)), |
162 | | - Offset(x, params.fitPrice(pt)), |
163 | | - trendLinePaint, |
164 | | - ); |
165 | | - } |
166 | | - if (i == 0) { |
167 | | - // In the front, draw an extra line connecting to out-of-window data |
168 | | - if (pt != null && params.leadingTrend != null) { |
| 154 | + for (int j = 0; j < candle.trends.length; j++) { |
| 155 | + final trendLinePaint = params.style.trendLineStyles.at(j) ?? |
| 156 | + (Paint() |
| 157 | + ..strokeWidth = 2.0 |
| 158 | + ..strokeCap = StrokeCap.round |
| 159 | + ..color = Colors.blue); |
| 160 | + |
| 161 | + final pt = candle.trends.at(j); // current data point |
| 162 | + final prevPt = params.candles.at(i - 1)?.trends.at(j); |
| 163 | + if (pt != null && prevPt != null) { |
169 | 164 | canvas.drawLine( |
170 | | - Offset(x - params.candleWidth, params.fitPrice(params.leadingTrend!)), |
| 165 | + Offset(x - params.candleWidth, params.fitPrice(prevPt)), |
171 | 166 | Offset(x, params.fitPrice(pt)), |
172 | 167 | trendLinePaint, |
173 | 168 | ); |
174 | 169 | } |
175 | | - } else if (i == params.candles.length - 1) { |
176 | | - // At the end, draw an extra line connecting to out-of-window data |
177 | | - if (pt != null && params.trailingTrend != null) { |
178 | | - canvas.drawLine( |
179 | | - Offset(x, params.fitPrice(pt)), |
180 | | - Offset( |
181 | | - x + params.candleWidth, |
182 | | - params.fitPrice(params.trailingTrend!), |
183 | | - ), |
184 | | - trendLinePaint, |
185 | | - ); |
| 170 | + if (i == 0) { |
| 171 | + // In the front, draw an extra line connecting to out-of-window data |
| 172 | + if (pt != null && params.leadingTrends?.at(j) != null) { |
| 173 | + canvas.drawLine( |
| 174 | + Offset(x - params.candleWidth, |
| 175 | + params.fitPrice(params.leadingTrends!.at(j)!)), |
| 176 | + Offset(x, params.fitPrice(pt)), |
| 177 | + trendLinePaint, |
| 178 | + ); |
| 179 | + } |
| 180 | + } else if (i == params.candles.length - 1) { |
| 181 | + // At the end, draw an extra line connecting to out-of-window data |
| 182 | + if (pt != null && params.trailingTrends?.at(j) != null) { |
| 183 | + canvas.drawLine( |
| 184 | + Offset(x, params.fitPrice(pt)), |
| 185 | + Offset( |
| 186 | + x + params.candleWidth, |
| 187 | + params.fitPrice(params.trailingTrends!.at(j)!), |
| 188 | + ), |
| 189 | + trendLinePaint, |
| 190 | + ); |
| 191 | + } |
186 | 192 | } |
187 | 193 | } |
188 | 194 | } |
|
0 commit comments