buildConversationOrder function
List<int>
buildConversationOrder(
- List<
ConversationEntry> entries, { - String query = '',
- ConversationMatcher? matcher,
Returns source entry indexes in display order after applying query.
Implementation
List<int> buildConversationOrder(
List<ConversationEntry> entries, {
String query = '',
ConversationMatcher? matcher,
}) {
final trimmed = _sanitizeConversationText(query).trim();
if (trimmed.isEmpty) {
return List<int>.unmodifiable(
List<int>.generate(entries.length, (index) => index),
);
}
if (matcher != null) {
return List<int>.unmodifiable([
for (var index = 0; index < entries.length; index++)
if (matcher(entries[index], trimmed)) index,
]);
}
final q = trimmed.toLowerCase();
final exact = <int>[];
final prefix = <int>[];
final contains = <int>[];
final fuzzy = <int>[];
for (var index = 0; index < entries.length; index++) {
switch (_conversationRank(entries[index], q)) {
case _ConversationRank.exact:
exact.add(index);
case _ConversationRank.prefix:
prefix.add(index);
case _ConversationRank.contains:
contains.add(index);
case _ConversationRank.fuzzy:
fuzzy.add(index);
case null:
break;
}
}
return List<int>.unmodifiable([...exact, ...prefix, ...contains, ...fuzzy]);
}