renderableSearchText function
Flatten a RenderableMessage to lowercased searchable text.
Cached -- messages are append-only and immutable so a hit is always valid. Lowercased at cache time.
Implementation
String renderableSearchText(RenderableMessage msg) {
final cached = _searchTextCache[msg];
if (cached != null) return cached;
final result = _computeSearchText(msg).toLowerCase();
_searchTextCache[msg] = result;
return result;
}