updateTextColor function
Implementation
List<TextSpan> updateTextColor(
List<TextSpan> originalSpans,
List<int> targetLines,
Color newColor,
) {
// Check if the target line is within the range of the list
if (targetLines.isEmpty) {
return originalSpans;
}
// Clone the original list to avoid mutating it directly
List<TextSpan> updatedSpans = List<TextSpan>.from(originalSpans);
// Detect line break from the list of text spans
// This is done by checking if the previous span is a line break
// If it is, then the current span is the start of a new line
int line = 1;
for (int i = 0; i < updatedSpans.length; i++) {
if (i > 0) {
final currentValue = updatedSpans[i].text ?? '';
if (currentValue.startsWith('\n')) {
line++;
}
}
final originalSpan = originalSpans[i];
final textStyle = originalSpan.style ?? const TextStyle();
if (targetLines.contains(line)) {
updatedSpans[i] = TextSpan(
text: originalSpan.text,
children: originalSpan.children,
recognizer: originalSpan.recognizer,
mouseCursor: originalSpan.mouseCursor,
onEnter: originalSpan.onEnter,
onExit: originalSpan.onExit,
semanticsLabel: originalSpan.semanticsLabel,
locale: originalSpan.locale,
spellOut: originalSpan.spellOut,
style: textStyle.copyWith(
backgroundColor: newColor,
),
);
}
}
return updatedSpans;
}