drawChart method
void
drawChart(
- KLineEntity lastPoint,
- KLineEntity curPoint,
- double lastX,
- double curX,
- Size size,
- Canvas canvas,
override
Implementation
@override
void drawChart(KLineEntity lastPoint, KLineEntity curPoint, double lastX,
double curX, Size size, Canvas canvas) {
switch (state) {
case SecondaryState.VOLATILITY:
drawLine(lastPoint.volIndicator, curPoint.volIndicator, canvas, lastX,
curX, chartColors.volIndicatorColor);
break;
case SecondaryState.ENVELOPES:
// 中轨
drawLine(lastPoint.envMid, curPoint.envMid, canvas, lastX, curX,
chartColors.envMidColor);
// 上轨
drawLine(lastPoint.envUp, curPoint.envUp, canvas, lastX, curX,
chartColors.envUpColor);
// 下轨
drawLine(lastPoint.envDn, curPoint.envDn, canvas, lastX, curX,
chartColors.envDnColor);
break;
case SecondaryState.MFI:
drawLine(lastPoint.mfi, curPoint.mfi, canvas, lastX, curX,
chartColors.mfiColor);
break;
case SecondaryState.MOMENTUM:
drawLine(lastPoint.momentum, curPoint.momentum, canvas, lastX, curX,
chartColors.momentumColor);
break;
case SecondaryState.DEMARKER:
drawLine(lastPoint.dem, curPoint.dem, canvas, lastX, curX,
chartColors.demColor);
break;
case SecondaryState.WPR:
// 只是一条线
drawLine(lastPoint.wpr, curPoint.wpr, canvas, lastX, curX,
chartColors.wprColor);
break;
case SecondaryState.STOCHASTIC:
// 画 %K
drawLine(lastPoint.stochK, curPoint.stochK, canvas, lastX, curX,
chartColors.stochKColor);
// 画 %D
drawLine(lastPoint.stochD, curPoint.stochD, canvas, lastX, curX,
chartColors.stochDColor);
break;
case SecondaryState.STDDEV:
drawLine(lastPoint.stdDev, curPoint.stdDev, canvas, lastX, curX,
chartColors.stdDevColor);
break;
case SecondaryState.ADX:
drawLine(lastPoint.adx, curPoint.adx, canvas, lastX, curX,
chartColors.adxColor);
break;
case SecondaryState.VIX:
drawLine(lastPoint.vix, curPoint.vix, canvas, lastX, curX,
chartColors.vixColor);
break;
case SecondaryState.ADL:
drawLine(lastPoint.adl, curPoint.adl, canvas, lastX, curX,
chartColors.adlColor);
break;
case SecondaryState.OBV:
// 画OBV原始线
drawLine(lastPoint.obv, curPoint.obv, canvas, lastX, curX,
chartColors.obvColor);
// 画OBV平滑线
drawLine(lastPoint.obvEma, curPoint.obvEma, canvas, lastX, curX,
chartColors.obvEmaColor);
break;
case SecondaryState.VWAP:
drawLine(lastPoint.vwap, curPoint.vwap, canvas, lastX, curX,
chartColors.vwapColor);
break;
case SecondaryState.HV:
drawLine(lastPoint.hv, curPoint.hv, canvas, lastX, curX,
chartColors.hvColor);
break;
case SecondaryState.ATR:
drawLine(lastPoint.atr, curPoint.atr, canvas, lastX, curX,
chartColors.atrColor);
break;
case SecondaryState.SUPER_TREND:
final double? dir =
curPoint.superTrendDirection ?? lastPoint.superTrendDirection;
final Color trendColor = (dir ?? 1.0) >= 0
? chartColors.superTrendUpColor
: chartColors.superTrendDownColor;
drawLine(lastPoint.superTrend, curPoint.superTrend, canvas, lastX, curX,
trendColor);
drawLine(lastPoint.superTrendUpper, curPoint.superTrendUpper, canvas,
lastX, curX, chartColors.superTrendUpperColor);
drawLine(lastPoint.superTrendLower, curPoint.superTrendLower, canvas,
lastX, curX, chartColors.superTrendLowerColor);
break;
case SecondaryState.STC:
drawLine(lastPoint.stc, curPoint.stc, canvas, lastX, curX,
chartColors.stcColor);
break;
case SecondaryState.QQE:
drawLine(lastPoint.qqe, curPoint.qqe, canvas, lastX, curX,
chartColors.qqeColor);
drawLine(lastPoint.qqeSignal, curPoint.qqeSignal, canvas, lastX, curX,
chartColors.qqeSignalColor);
break;
case SecondaryState.WAVE_TREND:
drawLine(lastPoint.waveTrend1, curPoint.waveTrend1, canvas, lastX, curX,
chartColors.waveTrend1Color);
drawLine(lastPoint.waveTrend2, curPoint.waveTrend2, canvas, lastX, curX,
chartColors.waveTrend2Color);
break;
case SecondaryState.CMO:
drawLine(lastPoint.cmo, curPoint.cmo, canvas, lastX, curX,
chartColors.cmoColor);
break;
case SecondaryState.EOM:
drawLine(lastPoint.eom, curPoint.eom, canvas, lastX, curX,
chartColors.eomColor);
break;
case SecondaryState.PVI_NVI:
drawLine(lastPoint.pvi, curPoint.pvi, canvas, lastX, curX,
chartColors.pviColor);
drawLine(lastPoint.nvi, curPoint.nvi, canvas, lastX, curX,
chartColors.nviColor);
break;
case SecondaryState.VORTEX:
drawLine(lastPoint.viPlus, curPoint.viPlus, canvas, lastX, curX,
chartColors.vortexPlusColor);
drawLine(lastPoint.viMinus, curPoint.viMinus, canvas, lastX, curX,
chartColors.vortexMinusColor);
break;
case SecondaryState.AROON:
// 画3条线
drawLine(lastPoint.aroonUp, curPoint.aroonUp, canvas, lastX, curX,
chartColors.aroonUpColor);
drawLine(lastPoint.aroonDown, curPoint.aroonDown, canvas, lastX, curX,
chartColors.aroonDownColor);
// Osc(可选)
drawLine(lastPoint.aroonOsc, curPoint.aroonOsc, canvas, lastX, curX,
chartColors.aroonOscColor);
break;
case SecondaryState.SAR:
// 画一条线 or 一系列点
// 1) 你可以直接在 drawChart(lastPoint, curPoint) 里用 drawLine(...) or drawCircle(...)
// 演示:点对点画圆 (可替换成 line)
final psarLast = lastPoint.psar;
final psarCur = curPoint.psar;
if (psarLast != null && psarLast.isFinite) {
double yLast = getY(psarLast);
Paint p = chartPaint
..color =
curPoint.psarIsUp! ? chartColors.upColor : chartColors.dnColor
..style = PaintingStyle.fill
..strokeWidth = 1.0;
// 这里画上一个点
// lastX, yLast => 2.5半径的小圆
canvas.drawCircle(Offset(lastX, yLast), 2.5, p);
}
if (psarCur != null && psarCur.isFinite) {
double yCur = getY(psarCur);
Paint p = chartPaint
..color =
curPoint.psarIsUp! ? chartColors.upColor : chartColors.dnColor
..style = PaintingStyle.fill
..strokeWidth = 1.0;
// 这里画当前点
canvas.drawCircle(Offset(curX, yCur), 2.5, p);
}
break;
case SecondaryState.ICHIMOKU:
drawIchimoku(lastPoint, curPoint, lastX, curX, size, canvas);
break;
case SecondaryState.TSI:
// 画 TSI主线
drawLine(lastPoint.tsi, curPoint.tsi, canvas, lastX, curX,
chartColors.tsiColor);
// 再画 TSI 信号线
drawLine(lastPoint.tsiSignal, curPoint.tsiSignal, canvas, lastX, curX,
chartColors.tsiSignalColor);
break;
case SecondaryState.PPO:
// 与MACD类似,画柱状或线?
// 常见做法:PPO主线 & PPO信号线 两条线
drawLine(lastPoint.ppo, curPoint.ppo, canvas, lastX, curX,
chartColors.ppoColor);
drawLine(lastPoint.ppoSignal, curPoint.ppoSignal, canvas, lastX, curX,
chartColors.ppoSignalColor);
break;
case SecondaryState.TRIX:
drawLine(lastPoint.trix, curPoint.trix, canvas, lastX, curX,
chartColors.trixColor);
drawLine(lastPoint.trixSignal, curPoint.trixSignal, canvas, lastX, curX,
chartColors.trixSignalColor);
break;
case SecondaryState.DMI:
// 画pdi、mdi、adx (以及adxr)
drawLine(lastPoint.pdi, curPoint.pdi, canvas, lastX, curX,
chartColors.dmiPdiColor);
drawLine(lastPoint.mdi, curPoint.mdi, canvas, lastX, curX,
chartColors.dmiMdiColor);
drawLine(lastPoint.adx, curPoint.adx, canvas, lastX, curX,
chartColors.dmiAdxColor);
// 如果还有 adxr
drawLine(lastPoint.adxr, curPoint.adxr, canvas, lastX, curX,
chartColors.dmiAdxrColor);
break;
case SecondaryState.MACD:
drawMACD(curPoint, canvas, curX, lastPoint, lastX);
break;
case SecondaryState.KDJ:
drawLine(lastPoint.k, curPoint.k, canvas, lastX, curX,
this.chartColors.kColor);
drawLine(lastPoint.d, curPoint.d, canvas, lastX, curX,
this.chartColors.dColor);
drawLine(lastPoint.j, curPoint.j, canvas, lastX, curX,
this.chartColors.jColor);
break;
case SecondaryState.RSI:
drawLine(lastPoint.rsi, curPoint.rsi, canvas, lastX, curX,
this.chartColors.rsiColor);
break;
case SecondaryState.WR:
drawLine(lastPoint.r, curPoint.r, canvas, lastX, curX,
this.chartColors.rsiColor);
break;
case SecondaryState.CCI:
drawLine(lastPoint.cci, curPoint.cci, canvas, lastX, curX,
this.chartColors.rsiColor);
break;
case SecondaryState.CMF:
drawLine(lastPoint.cmf, curPoint.cmf, canvas, lastX, curX,
chartColors.cmfColor);
break;
case SecondaryState.CHAIKIN_OSC:
drawLine(lastPoint.chaikinOscillator, curPoint.chaikinOscillator,
canvas, lastX, curX, chartColors.chaikinOscColor);
break;
case SecondaryState.KLINGER:
drawLine(lastPoint.kvo, curPoint.kvo, canvas, lastX, curX,
chartColors.klingerColor);
drawLine(lastPoint.kvoSignal, curPoint.kvoSignal, canvas, lastX, curX,
chartColors.klingerSignalColor);
break;
case SecondaryState.VPT:
drawLine(lastPoint.vpt, curPoint.vpt, canvas, lastX, curX,
chartColors.vptColor);
break;
case SecondaryState.FORCE:
drawLine(lastPoint.forceIndex, curPoint.forceIndex, canvas, lastX, curX,
chartColors.forceIndexColor);
break;
case SecondaryState.ROC:
drawLine(lastPoint.roc, curPoint.roc, canvas, lastX, curX,
chartColors.rocColor);
drawLine(lastPoint.rocSignal, curPoint.rocSignal, canvas, lastX, curX,
chartColors.rocSignalColor);
break;
case SecondaryState.ULTIMATE:
drawLine(lastPoint.ultimateOsc, curPoint.ultimateOsc, canvas, lastX,
curX, chartColors.ultimateOscColor);
break;
case SecondaryState.CONNORS_RSI:
drawLine(lastPoint.connorsRsi, curPoint.connorsRsi, canvas, lastX, curX,
chartColors.connorsRsiColor);
break;
case SecondaryState.STOCH_RSI:
drawLine(lastPoint.stochRsiK, curPoint.stochRsiK, canvas, lastX, curX,
chartColors.stochRsiKColor);
drawLine(lastPoint.stochRsiD, curPoint.stochRsiD, canvas, lastX, curX,
chartColors.stochRsiDColor);
break;
case SecondaryState.RVI:
drawLine(lastPoint.rvi, curPoint.rvi, canvas, lastX, curX,
chartColors.rviColor);
drawLine(lastPoint.rviSignal, curPoint.rviSignal, canvas, lastX, curX,
chartColors.rviSignalColor);
break;
case SecondaryState.DPO:
drawLine(lastPoint.dpo, curPoint.dpo, canvas, lastX, curX,
chartColors.dpoColor);
break;
case SecondaryState.KAMA:
drawLine(lastPoint.kama, curPoint.kama, canvas, lastX, curX,
chartColors.kamaColor);
break;
case SecondaryState.HMA:
drawLine(lastPoint.hma, curPoint.hma, canvas, lastX, curX,
chartColors.hmaColor);
break;
case SecondaryState.KELTNER:
drawLine(lastPoint.keltnerMiddle, curPoint.keltnerMiddle, canvas, lastX,
curX, chartColors.keltnerMidColor);
drawLine(lastPoint.keltnerUpper, curPoint.keltnerUpper, canvas, lastX,
curX, chartColors.keltnerUpColor);
drawLine(lastPoint.keltnerLower, curPoint.keltnerLower, canvas, lastX,
curX, chartColors.keltnerDnColor);
break;
case SecondaryState.DONCHIAN:
drawLine(lastPoint.donchianMiddle, curPoint.donchianMiddle, canvas,
lastX, curX, chartColors.donchianMidColor);
drawLine(lastPoint.donchianUpper, curPoint.donchianUpper, canvas, lastX,
curX, chartColors.donchianUpColor);
drawLine(lastPoint.donchianLower, curPoint.donchianLower, canvas, lastX,
curX, chartColors.donchianDnColor);
break;
case SecondaryState.BOLL_BANDWIDTH:
drawLine(lastPoint.bollBandwidth, curPoint.bollBandwidth, canvas, lastX,
curX, chartColors.bollBandwidthColor);
break;
case SecondaryState.CHAIKIN_VOLATILITY:
drawLine(lastPoint.chaikinVolatility, curPoint.chaikinVolatility,
canvas, lastX, curX, chartColors.chaikinVolatilityColor);
break;
case SecondaryState.HV_PERCENTILE:
drawLine(lastPoint.hvPercentile, curPoint.hvPercentile, canvas, lastX,
curX, chartColors.hvPercentileColor);
break;
case SecondaryState.ATR_PERCENTILE:
drawLine(lastPoint.atrPercentile, curPoint.atrPercentile, canvas, lastX,
curX, chartColors.atrPercentileColor);
break;
case SecondaryState.ELDER_RAY:
drawLine(lastPoint.elderBull, curPoint.elderBull, canvas, lastX, curX,
chartColors.elderBullColor);
drawLine(lastPoint.elderBear, curPoint.elderBear, canvas, lastX, curX,
chartColors.elderBearColor);
break;
case SecondaryState.ICHIMOKU_SPAN:
drawLine(lastPoint.ichimokuSpanDiff, curPoint.ichimokuSpanDiff, canvas,
lastX, curX, chartColors.ichimokuSpanDiffColor);
break;
case SecondaryState.PIVOT:
drawLine(lastPoint.pivot, curPoint.pivot, canvas, lastX, curX,
chartColors.pivotColor);
drawLine(lastPoint.pivotR1, curPoint.pivotR1, canvas, lastX, curX,
chartColors.pivotResistanceColor);
drawLine(lastPoint.pivotR2, curPoint.pivotR2, canvas, lastX, curX,
chartColors.pivotResistanceColor.withValues(alpha: 0.7));
drawLine(lastPoint.pivotR3, curPoint.pivotR3, canvas, lastX, curX,
chartColors.pivotResistanceColor.withValues(alpha: 0.4));
drawLine(lastPoint.pivotS1, curPoint.pivotS1, canvas, lastX, curX,
chartColors.pivotSupportColor);
drawLine(lastPoint.pivotS2, curPoint.pivotS2, canvas, lastX, curX,
chartColors.pivotSupportColor.withValues(alpha: 0.7));
drawLine(lastPoint.pivotS3, curPoint.pivotS3, canvas, lastX, curX,
chartColors.pivotSupportColor.withValues(alpha: 0.4));
break;
case SecondaryState.GANN_FAN:
drawLine(lastPoint.gann1x1, curPoint.gann1x1, canvas, lastX, curX,
chartColors.gann1x1Color);
drawLine(lastPoint.gann1x2, curPoint.gann1x2, canvas, lastX, curX,
chartColors.gann1x2Color);
drawLine(lastPoint.gann2x1, curPoint.gann2x1, canvas, lastX, curX,
chartColors.gann2x1Color);
break;
default:
break;
}
}