From 985829fee8dd87936e34dd89b9d6fee2540bca76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Wed, 23 Sep 2026 16:30:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(app):=20poster=20title=20truly=20left-align?= =?UTF-8?q?ed=20=E2=80=94=20Column=20crossAxisAlignment=20start=20(QR=20re?= =?UTF-8?q?-centered)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Text 的 textAlign 被 Column 默认 center 吞掉(文本行收缩包裹时对齐不生效); 文字区 Column 改 CrossAxisAlignment.start,二维码+扫码说明显式 Center 回居中。 Co-Authored-By: Claude Code --- apps/mobile/lib/pages/share_qr_dialog.dart | 29 +++++++++++------- apps/viewer/e2e/embed-v2.spec.ts | 4 +-- .../actual/server/photo-modal.png | Bin 108335 -> 108363 bytes .../recordings/e03-scroll-32s.webm | Bin 3818957 -> 3741894 bytes 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/apps/mobile/lib/pages/share_qr_dialog.dart b/apps/mobile/lib/pages/share_qr_dialog.dart index 2ace2a6..6d4ca60 100644 --- a/apps/mobile/lib/pages/share_qr_dialog.dart +++ b/apps/mobile/lib/pages/share_qr_dialog.dart @@ -448,8 +448,11 @@ class _PosterSheetState extends ConsumerState<_PosterSheet> { Padding( padding: const EdgeInsets.all(kSpace24), child: Column( + // 标题/时间/地址居左(Column 默认 center 会吞掉 + // Text 的 textAlign——对齐由这里统一决定)。 + crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 活动标题(居左;二维码保持居中)。 + // 活动标题(居左)。 Text( title, textAlign: TextAlign.left, @@ -509,18 +512,22 @@ class _PosterSheetState extends ConsumerState<_PosterSheet> { ), ], const SizedBox(height: kSpace24), - // 二维码(白底保持扫码对比度)。 - QrImageView( - data: url, - version: QrVersions.auto, - size: 200, - backgroundColor: Colors.white, + // 二维码 + 说明:保持居中(文字区居左的例外)。 + Center( + child: QrImageView( + data: url, + version: QrVersions.auto, + size: 200, + backgroundColor: Colors.white, + ), ), const SizedBox(height: kSpace12), - Text( - l10n.shareScanHint, - style: theme.textTheme.bodySmall?.copyWith( - color: const Color(0xFF69778E), + Center( + child: Text( + l10n.shareScanHint, + style: theme.textTheme.bodySmall?.copyWith( + color: const Color(0xFF69778E), + ), ), ), ], diff --git a/apps/viewer/e2e/embed-v2.spec.ts b/apps/viewer/e2e/embed-v2.spec.ts index 0cc4b0a..89fa126 100644 --- a/apps/viewer/e2e/embed-v2.spec.ts +++ b/apps/viewer/e2e/embed-v2.spec.ts @@ -370,9 +370,7 @@ test.describe.serial('E04 interactions: pause, click lock, keyboard, destroy', ( await frame.waitFor(); const inside = page.frameLocator('iframe[src*="/embed/"][src*="v=2"]'); await page.waitForTimeout(1200); - // 聚焦流区域(点击视口非链接处不触发照片点击——顶部渐隐带命中视口)。 - const box = await frame.boundingBox(); - await page.mouse.click((box!.x ?? 0) + 90, (box!.y ?? 0) + 6); + // 聚焦流区域(程序化聚焦,不点击——照片点击现会打开宿主详情弹框)。 await inside.locator('.stream-viewport').focus(); await page.keyboard.press(' '); await page.waitForTimeout(300); diff --git a/docs/designs/ui04-implementation/actual/server/photo-modal.png b/docs/designs/ui04-implementation/actual/server/photo-modal.png index 7f25a9a754f9c2039646a7215c7537fd535ba3c0..530eea63c36941bc2c726fdff51d8dd497dda5bc 100644 GIT binary patch delta 73561 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