highlightQuery function

TextSpan highlightQuery(
  1. String label,
  2. String query,
  3. TextStyle baseStyle,
  4. PrismSearchHighlightStyle? highlightStyle,
)

Splits label into plain/highlighted segments around every case-insensitive occurrence of query.

Returns the full TextSpan for a suggestion row; when query is empty or not found, a single plain span is returned.

Implementation

TextSpan highlightQuery(
  String label,
  String query,
  TextStyle baseStyle,
  PrismSearchHighlightStyle? highlightStyle,
) {
  if (query.isEmpty) return TextSpan(text: label, style: baseStyle);
  final lowerLabel = label.toLowerCase();
  final lowerQuery = query.toLowerCase();
  final start = lowerLabel.indexOf(lowerQuery);
  if (start < 0) return TextSpan(text: label, style: baseStyle);

  final color = highlightStyle?.color;
  final bold = highlightStyle?.bold ?? true;
  final matchStyle = baseStyle.copyWith(
    color: color,
    fontWeight: bold ? FontWeight.w700 : null,
  );

  return TextSpan(
    style: baseStyle,
    children: [
      if (start > 0) TextSpan(text: label.substring(0, start)),
      TextSpan(
        text: label.substring(start, start + query.length),
        style: matchStyle,
      ),
      if (start + query.length < label.length)
        TextSpan(text: label.substring(start + query.length)),
    ],
  );
}