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;