fix: 评论区展示@用户 issues #344

This commit is contained in:
guozhigq
2024-01-01 22:09:25 +08:00
parent 7af990d97f
commit 11920e40a9
2 changed files with 31 additions and 5 deletions

View File

@ -2,7 +2,7 @@ class ReplyContent {
ReplyContent({ ReplyContent({
this.message, this.message,
this.atNameToMid, // @的用户的mid null this.atNameToMid, // @的用户的mid null
this.memebers, // 被@的用户List 如果有的话 [] this.members, // 被@的用户List 如果有的话 []
this.emote, // 表情包 如果有的话 null this.emote, // 表情包 如果有的话 null
this.jumpUrl, // {} this.jumpUrl, // {}
this.pictures, // {} this.pictures, // {}
@ -13,7 +13,7 @@ class ReplyContent {
String? message; String? message;
Map? atNameToMid; Map? atNameToMid;
List? memebers; List<MemberItemModel>? members;
Map? emote; Map? emote;
Map? jumpUrl; Map? jumpUrl;
List? pictures; List? pictures;
@ -27,7 +27,11 @@ class ReplyContent {
.replaceAll('&#34;', '"') .replaceAll('&#34;', '"')
.replaceAll('&#39;', "'"); .replaceAll('&#39;', "'");
atNameToMid = json['at_name_to_mid'] ?? {}; atNameToMid = json['at_name_to_mid'] ?? {};
memebers = json['memebers'] ?? []; members = json['members'] != null
? json['members']
.map<MemberItemModel>((e) => MemberItemModel.fromJson(e))
.toList()
: [];
emote = json['emote'] ?? {}; emote = json['emote'] ?? {};
jumpUrl = json['jump_url'] ?? {}; jumpUrl = json['jump_url'] ?? {};
pictures = json['pictures'] ?? []; pictures = json['pictures'] ?? [];
@ -37,3 +41,18 @@ class ReplyContent {
isText = atNameToMid!.isEmpty && vote!.isEmpty && pictures!.isEmpty; isText = atNameToMid!.isEmpty && vote!.isEmpty && pictures!.isEmpty;
} }
} }
class MemberItemModel {
MemberItemModel({
required this.mid,
required this.uname,
});
late String mid;
late String uname;
MemberItemModel.fromJson(Map<String, dynamic> json) {
mid = json['mid'];
uname = json['uname'];
}
}

View File

@ -628,8 +628,13 @@ InlineSpan buildContent(
// 匹配@用户 // 匹配@用户
String matchMember = str; String matchMember = str;
if (content.atNameToMid.isNotEmpty) { if (content.atNameToMid.isNotEmpty) {
RegExp reg = RegExp(r"@.*( |:)");
if (content.atNameToMid.length == 1 &&
content.message == '@${content.members.first.uname}') {
reg = RegExp(r"@.*( |:|$)");
}
matchMember = str.splitMapJoin( matchMember = str.splitMapJoin(
RegExp(r"@.*( |:)"), reg,
onMatch: (Match match) { onMatch: (Match match) {
if (match[0] != null) { if (match[0] != null) {
hasMatchMember = false; hasMatchMember = false;
@ -657,7 +662,9 @@ InlineSpan buildContent(
return ''; return '';
}, },
onNonMatch: (String str) { onNonMatch: (String str) {
spanChilds.add(TextSpan(text: str)); if (!str.contains('@')) {
spanChilds.add(TextSpan(text: str));
}
return str; return str;
}, },
); );