From 6bcfa18b01431733439e17db1301a6e12a84615c Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 29 Jan 2026 07:39:42 -0800 Subject: [PATCH] =?UTF-8?q?fix(mining-app):=20=E4=BF=AE=E5=A4=8D=E8=BD=AC?= =?UTF-8?q?=E8=B4=A6=E4=BA=8C=E7=BB=B4=E7=A0=81=E6=89=AB=E6=8F=8F=E6=97=A0?= =?UTF-8?q?=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改二维码生成格式为 durian://transfer/?phone=xxx (添加路径分隔符) - 更新解析函数使用正则匹配,兼容新旧格式 Co-Authored-By: Claude Opus 4.5 --- .../pages/asset/receive_shares_page.dart | 2 +- .../presentation/widgets/qr_scanner_sheet.dart | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/frontend/mining-app/lib/presentation/pages/asset/receive_shares_page.dart b/frontend/mining-app/lib/presentation/pages/asset/receive_shares_page.dart index a28f2ed1..338d5bed 100644 --- a/frontend/mining-app/lib/presentation/pages/asset/receive_shares_page.dart +++ b/frontend/mining-app/lib/presentation/pages/asset/receive_shares_page.dart @@ -156,7 +156,7 @@ class ReceiveSharesPage extends ConsumerWidget { ), ), child: QrImageView( - data: 'durian://transfer?phone=$phone', + data: 'durian://transfer/?phone=$phone', version: QrVersions.auto, size: 200, backgroundColor: Colors.white, diff --git a/frontend/mining-app/lib/presentation/widgets/qr_scanner_sheet.dart b/frontend/mining-app/lib/presentation/widgets/qr_scanner_sheet.dart index f03abe5a..42223199 100644 --- a/frontend/mining-app/lib/presentation/widgets/qr_scanner_sheet.dart +++ b/frontend/mining-app/lib/presentation/widgets/qr_scanner_sheet.dart @@ -246,11 +246,23 @@ class _QrScannerSheetState extends State { } /// 解析转账二维码 -/// 格式: durian://transfer?phone={phone} +/// 格式: durian://transfer/?phone={phone} 或 durian://transfer?phone={phone} /// 返回手机号,解析失败返回 null String? parseTransferQrCode(String qrCode) { try { - final uri = Uri.parse(qrCode); + final trimmed = qrCode.trim(); + + // 使用正则表达式匹配,兼容有无 / 的格式 + // durian://transfer/?phone=xxx 或 durian://transfer?phone=xxx + final regex = RegExp(r'^durian://transfer/?[?]phone=(\d{11})$'); + final match = regex.firstMatch(trimmed); + + if (match != null) { + return match.group(1); + } + + // 备用方案:使用 Uri.parse + final uri = Uri.parse(trimmed); // 检查 scheme if (uri.scheme != 'durian') return null;