fix(ui): fix channel list tile style for mentioned users
Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
+31
-5
@@ -367,6 +367,11 @@ class ChannelLastMessageText extends StatelessWidget {
|
|||||||
final lastMessageAttachments = lastMessage.attachments;
|
final lastMessageAttachments = lastMessage.attachments;
|
||||||
final lastMessageMentionedUsers = lastMessage.mentionedUsers;
|
final lastMessageMentionedUsers = lastMessage.mentionedUsers;
|
||||||
|
|
||||||
|
final mentionedUsersRegex = RegExp(
|
||||||
|
lastMessageMentionedUsers.map((it) => '@${it.name}').join('|'),
|
||||||
|
caseSensitive: false,
|
||||||
|
);
|
||||||
|
|
||||||
final messageTextParts = [
|
final messageTextParts = [
|
||||||
...lastMessageAttachments.map((it) {
|
...lastMessageAttachments.map((it) {
|
||||||
if (it.type == 'image') {
|
if (it.type == 'image') {
|
||||||
@@ -380,7 +385,11 @@ class ChannelLastMessageText extends StatelessWidget {
|
|||||||
? (it.title ?? 'File')
|
? (it.title ?? 'File')
|
||||||
: '${it.title ?? 'File'} , ';
|
: '${it.title ?? 'File'} , ';
|
||||||
}),
|
}),
|
||||||
if (lastMessageText != null) lastMessageText,
|
if (lastMessageText != null)
|
||||||
|
if (lastMessageMentionedUsers.isNotEmpty)
|
||||||
|
...mentionedUsersRegex.allMatchesWithSep(lastMessageText)
|
||||||
|
else
|
||||||
|
lastMessageText,
|
||||||
];
|
];
|
||||||
|
|
||||||
final fontStyle = (lastMessage.isSystem || lastMessage.isDeleted)
|
final fontStyle = (lastMessage.isSystem || lastMessage.isDeleted)
|
||||||
@@ -399,7 +408,7 @@ class ChannelLastMessageText extends StatelessWidget {
|
|||||||
if (lastMessageMentionedUsers.isNotEmpty &&
|
if (lastMessageMentionedUsers.isNotEmpty &&
|
||||||
lastMessageMentionedUsers.any((it) => '@${it.name}' == part))
|
lastMessageMentionedUsers.any((it) => '@${it.name}' == part))
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: '$part ',
|
text: part,
|
||||||
style: mentionsTextStyle,
|
style: mentionsTextStyle,
|
||||||
)
|
)
|
||||||
else if (lastMessageAttachments.isNotEmpty &&
|
else if (lastMessageAttachments.isNotEmpty &&
|
||||||
@@ -407,12 +416,14 @@ class ChannelLastMessageText extends StatelessWidget {
|
|||||||
.where((it) => it.title != null)
|
.where((it) => it.title != null)
|
||||||
.any((it) => it.title == part))
|
.any((it) => it.title == part))
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: '$part ',
|
text: part,
|
||||||
style: regularTextStyle,
|
style: regularTextStyle?.copyWith(
|
||||||
|
fontStyle: FontStyle.italic,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: part == messageTextParts.last ? part : '$part ',
|
text: part,
|
||||||
style: regularTextStyle,
|
style: regularTextStyle,
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
@@ -426,3 +437,18 @@ class ChannelLastMessageText extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension _RegExpX on RegExp {
|
||||||
|
List<String> allMatchesWithSep(String input, [int start = 0]) {
|
||||||
|
final result = <String>[];
|
||||||
|
for (final match in allMatches(input, start)) {
|
||||||
|
result.add(input.substring(start, match.start));
|
||||||
|
// ignore: cascade_invocations
|
||||||
|
result.add(match[0]!);
|
||||||
|
// ignore: parameter_assignments
|
||||||
|
start = match.end;
|
||||||
|
}
|
||||||
|
result.add(input.substring(start));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ void main() {
|
|||||||
child: StreamChannel(
|
child: StreamChannel(
|
||||||
channel: channel,
|
channel: channel,
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
body: StreamChannelPreview(
|
body: ChannelPreview(
|
||||||
channel: channel,
|
channel: channel,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user