diff --git a/lib/pages/video/detail/introduction/widgets/season.dart b/lib/pages/video/detail/introduction/widgets/season.dart index 0be22757..611b9d70 100644 --- a/lib/pages/video/detail/introduction/widgets/season.dart +++ b/lib/pages/video/detail/introduction/widgets/season.dart @@ -70,6 +70,7 @@ class _SeasonPanelState extends State { currentIndex = i; setState(() {}); Get.back(); + setState(() {}); } @override diff --git a/lib/pages/video/detail/reply/widgets/reply_item.dart b/lib/pages/video/detail/reply/widgets/reply_item.dart index 76e63e72..0c2328fc 100644 --- a/lib/pages/video/detail/reply/widgets/reply_item.dart +++ b/lib/pages/video/detail/reply/widgets/reply_item.dart @@ -11,6 +11,7 @@ import 'package:pilipala/pages/preview/index.dart'; import 'package:pilipala/pages/video/detail/index.dart'; import 'package:pilipala/pages/video/detail/replyNew/index.dart'; import 'package:pilipala/utils/feed_back.dart'; +import 'package:pilipala/utils/id_utils.dart'; import 'package:pilipala/utils/storage.dart'; import 'package:pilipala/utils/utils.dart'; @@ -667,10 +668,11 @@ InlineSpan buildContent( // 匹配 jumpUrl String matchUrl = matchMember; if (content.jumpUrl.isNotEmpty && hasMatchMember) { - List urlKeys = content.jumpUrl.keys.toList(); + List urlKeys = content.jumpUrl.keys.toList().reversed.toList(); matchUrl = matchMember.splitMapJoin( /// RegExp.escape() 转义特殊字符 - RegExp(RegExp.escape(urlKeys.join("|"))), + RegExp(urlKeys.map((key) => key).join("|")), + // RegExp(RegExp.escape(urlKeys.join("|"))), onMatch: (Match match) { String matchStr = match[0]!; String appUrlSchema = content.jumpUrl[matchStr]['app_url_schema']; @@ -688,14 +690,26 @@ InlineSpan buildContent( recognizer: TapGestureRecognizer() ..onTap = () { if (appUrlSchema == '') { - Get.toNamed( - '/webview', - parameters: { - 'url': matchStr, - 'type': 'url', - 'pageTitle': '' - }, - ); + String str = Uri.parse(matchStr).pathSegments[0]; + Map matchRes = IdUtils.matchAvorBv(input: str); + List matchKeys = matchRes.keys.toList(); + if (matchKeys.isNotEmpty) { + if (matchKeys.first == 'BV') { + Get.toNamed( + '/searchResult', + parameters: {'keyword': matchRes['BV']}, + ); + } + } else { + Get.toNamed( + '/webview', + parameters: { + 'url': matchStr, + 'type': 'url', + 'pageTitle': '' + }, + ); + } } else { if (appUrlSchema.startsWith('bilibili://search') && enableWordRe) { diff --git a/lib/pages/webview/controller.dart b/lib/pages/webview/controller.dart index 9cc7817d..fae5a5fc 100644 --- a/lib/pages/webview/controller.dart +++ b/lib/pages/webview/controller.dart @@ -11,6 +11,7 @@ import 'package:pilipala/pages/home/index.dart'; import 'package:pilipala/pages/media/index.dart'; import 'package:pilipala/utils/cookie.dart'; import 'package:pilipala/utils/event_bus.dart'; +import 'package:pilipala/utils/id_utils.dart'; import 'package:pilipala/utils/login.dart'; import 'package:pilipala/utils/storage.dart'; import 'package:webview_flutter/webview_flutter.dart'; @@ -50,7 +51,19 @@ class WebviewController extends GetxController { // Update loading bar. loadProgress.value = progress; }, - onPageStarted: (String url) {}, + onPageStarted: (String url) { + String str = Uri.parse(url).pathSegments[0]; + Map matchRes = IdUtils.matchAvorBv(input: str); + List matchKeys = matchRes.keys.toList(); + if (matchKeys.isNotEmpty) { + if (matchKeys.first == 'BV') { + Get.offAndToNamed( + '/searchResult', + parameters: {'keyword': matchRes['BV']}, + ); + } + } + }, // 加载完成 onUrlChange: (UrlChange urlChange) async { loadShow.value = false; diff --git a/lib/utils/em.dart b/lib/utils/em.dart index 68eed977..8dba2c13 100644 --- a/lib/utils/em.dart +++ b/lib/utils/em.dart @@ -19,6 +19,10 @@ class Em { return regCate(matchStr); }, onNonMatch: (String str) { if (str != '') { + str = str + .replaceAll('>', '>') + .replaceAll('"', '"') + .replaceAll(''', "'"); Map map = {'type': 'text', 'text': str}; res.add(map); }