From 5dfef3172eeec2bebb0b7a00a4f5385dd6e60ad7 Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 19 Jan 2026 19:57:32 -0800 Subject: [PATCH] =?UTF-8?q?fix(kline):=20=E4=BF=AE=E6=AD=A3=E6=9C=80?= =?UTF-8?q?=E6=96=B0K=E7=BA=BF=E5=B1=85=E4=B8=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit K线从屏幕左边开始画,通过leftOffset偏移使最新K线显示在展示区中央。 Co-Authored-By: Claude Opus 4.5 --- .../widgets/kline_chart/kline_chart_widget.dart | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_chart_widget.dart b/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_chart_widget.dart index 9c3d9414..3fe7c504 100644 --- a/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_chart_widget.dart +++ b/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_chart_widget.dart @@ -584,12 +584,16 @@ class _KlineChartWidgetState extends State { final totalWidth = widget.klines.length * _candleWidth; // 计算左侧偏移量:当K线总宽度小于可用宽度时,让最新K线(最右边)居中显示 - // 最新K线位置 = totalWidth - candleWidth/2(最后一根K线的中心点) - // 居中偏移 = 屏幕中心 - 最新K线位置 = availableWidth/2 - (totalWidth - candleWidth/2) + // K线从左边开始画,第一根K线在 x=0,最后一根K线中心在 x=(n-1)*candleWidth + candleWidth/2 + // 我们要让最后一根K线的中心位于屏幕中央 (availableWidth/2) + // 所以:leftOffset + (n-1)*candleWidth + candleWidth/2 = availableWidth/2 + // leftOffset = availableWidth/2 - (n-1)*candleWidth - candleWidth/2 + // leftOffset = availableWidth/2 - n*candleWidth + candleWidth/2 + // leftOffset = (availableWidth - totalWidth + candleWidth) / 2 double leftOffset = 0.0; if (totalWidth < availableWidth) { - // 让最新K线居中:偏移量 = 屏幕中心 - 最新K线中心位置 - leftOffset = (availableWidth / 2) - (totalWidth - _candleWidth / 2); + final lastKlineCenter = (widget.klines.length - 1) * _candleWidth + _candleWidth / 2; + leftOffset = (availableWidth / 2) - lastKlineCenter; } // 根据滚动位置计算可见的K线范围