diff --git a/lib/models/video/reply/content.dart b/lib/models/video/reply/content.dart index 9180ec97..d62a4bca 100644 --- a/lib/models/video/reply/content.dart +++ b/lib/models/video/reply/content.dart @@ -9,6 +9,7 @@ class ReplyContent { this.vote, this.richText, this.isText, + this.topicsMeta, }); String? message; @@ -20,6 +21,7 @@ class ReplyContent { Map? vote; Map? richText; bool? isText; + Map? topicsMeta; ReplyContent.fromJson(Map json) { message = json['message'] @@ -39,6 +41,7 @@ class ReplyContent { richText = json['rich_text'] ?? {}; // 不包含@ 笔记 图片的时候,文字可折叠 isText = atNameToMid!.isEmpty && vote!.isEmpty && pictures!.isEmpty; + topicsMeta = json['topics_meta'] ?? {}; } } diff --git a/lib/pages/video/detail/reply/widgets/reply_item.dart b/lib/pages/video/detail/reply/widgets/reply_item.dart index 5840b2bf..246d0688 100644 --- a/lib/pages/video/detail/reply/widgets/reply_item.dart +++ b/lib/pages/video/detail/reply/widgets/reply_item.dart @@ -507,6 +507,7 @@ InlineSpan buildContent( // 构建正则表达式 final List specialTokens = [ ...content.emote.keys, + ...content.topicsMeta?.keys?.map((e) => '#$e#') ?? [], ...content.atNameToMid.keys.map((e) => '@$e'), ...content.jumpUrl.keys.map((e) => e.replaceAll('?', '\\?').replaceAll('+', '\\+').replaceAll('*', '\\*')), @@ -590,7 +591,7 @@ InlineSpan buildContent( ), ); } else { - // print("matchStr=$matchStr"); + print("matchStr=$matchStr"); String appUrlSchema = ''; final bool enableWordRe = setting.get(SettingBoxKey.enableWordRe, defaultValue: false) as bool; @@ -693,6 +694,23 @@ InlineSpan buildContent( ); // 只显示一次 matchedStrs.add(matchStr); + } else if (content + .topicsMeta[matchStr.substring(1, matchStr.length - 1)] != + null) { + spanChilds.add( + TextSpan( + text: matchStr, + style: TextStyle( + color: Theme.of(context).colorScheme.primary, + ), + recognizer: TapGestureRecognizer() + ..onTap = () { + final String topic = + matchStr.substring(1, matchStr.length - 1); + Get.toNamed('/searchResult', parameters: {'keyword': topic}); + }, + ), + ); } else { addPlainTextSpan(matchStr); }