From 85a59e11b961de26d781308619b3386619439507 Mon Sep 17 00:00:00 2001 From: orz12 Date: Thu, 1 Feb 2024 22:56:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E8=AF=8D=E6=97=B6=E6=97=A0=E6=B3=95=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E6=97=B6=E9=97=B4=E3=80=81=E4=BF=AE=E5=A4=8D=E4=B8=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=85=B3=E9=94=AE=E8=AF=8D=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E8=B6=85=E9=93=BE=E6=8E=A5=E3=80=81=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=B7=BB=E5=8A=A0=E4=B8=AD=E6=96=87=E5=86=92=E5=8F=B7?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E5=B9=B6=E6=8F=90=E5=8D=87=E5=88=86=E6=94=AF?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E4=B8=A5=E6=A0=BC=E7=A8=8B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../detail/reply/widgets/reply_item.dart | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/pages/video/detail/reply/widgets/reply_item.dart b/lib/pages/video/detail/reply/widgets/reply_item.dart index 98d8ba6a..cab9d420 100644 --- a/lib/pages/video/detail/reply/widgets/reply_item.dart +++ b/lib/pages/video/detail/reply/widgets/reply_item.dart @@ -595,10 +595,21 @@ InlineSpan buildContent( e.replaceAll('?', '\\?').replaceAll('+', '\\+').replaceAll('*', '\\*')), ]; - final String patternStr = - specialTokens.map(RegExp.escape).join('|') + r'|\b[0-9]{1,2}:[0-9]{2}\b'; + String patternStr = + specialTokens.map(RegExp.escape).join('|'); + if (patternStr.isNotEmpty) { + patternStr += "|"; + } + patternStr += r'(\b\d{1,2}[::]\d{2}\b)'; final RegExp pattern = RegExp(patternStr); List matchedStrs = []; + void addPlainTextSpan(str){ + spanChilds.add(TextSpan( + text: str, + recognizer: TapGestureRecognizer() + ..onTap = () => + replyReply(replyItem.root == 0 ? replyItem : fReplyItem))); + } // 分割文本并处理每个部分 content.message.splitMapJoin( pattern, @@ -636,7 +647,7 @@ InlineSpan buildContent( }, ), ); - } else if (matchStr.contains(':')) { + } else if (RegExp(r'^\b[0-9]{1,2}[::][0-9]{2}\b$').hasMatch(matchStr)) { spanChilds.add( TextSpan( text: ' $matchStr ', @@ -647,6 +658,7 @@ InlineSpan buildContent( ..onTap = () { // 跳转到指定位置 try { + matchStr = matchStr.replaceAll(':', ':'); SmartDialog.showToast('跳转至:$matchStr'); Get.find(tag: Get.arguments['heroTag']) .plPlayerController @@ -664,10 +676,13 @@ InlineSpan buildContent( String appUrlSchema = ''; final bool enableWordRe = setting.get(SettingBoxKey.enableWordRe, defaultValue: false) as bool; - if (enableWordRe && - content.jumpUrl[matchStr] != null && + if (content.jumpUrl[matchStr] != null && !matchedStrs.contains(matchStr)) { appUrlSchema = content.jumpUrl[matchStr]['app_url_schema']; + if (appUrlSchema.startsWith('bilibili://search') && !enableWordRe) { + addPlainTextSpan(matchStr); + return ""; + } spanChilds.add( TextSpan( text: content.jumpUrl[matchStr]['title'], @@ -707,7 +722,7 @@ InlineSpan buildContent( }, ), ); - if (appUrlSchema.startsWith('bilibili://search') && enableWordRe) { + if (appUrlSchema.startsWith('bilibili://search')) { spanChilds.add( WidgetSpan( child: Icon( @@ -722,21 +737,13 @@ InlineSpan buildContent( // 只显示一次 matchedStrs.add(matchStr); } else { - spanChilds.add(TextSpan( - text: matchStr, - recognizer: TapGestureRecognizer() - ..onTap = () => - replyReply(replyItem.root == 0 ? replyItem : fReplyItem))); + addPlainTextSpan(matchStr); } } return ''; }, onNonMatch: (String nonMatchStr) { - spanChilds.add(TextSpan( - text: nonMatchStr, - recognizer: TapGestureRecognizer() - ..onTap = () => - replyReply(replyItem.root == 0 ? replyItem : fReplyItem))); + addPlainTextSpan(nonMatchStr); return nonMatchStr; }, );