breakLines static method
Implementation
static List<String> breakLines(
String text,
double Function(String) measureText,
double maxWidth
) {
if (text.isEmpty) {
return [];
}
final List<String> lines = [];
final opportunities = findBreakOpportunities(text);
int startIndex = 0;
int lastGoodBreak = 0;
for (int i = 0; i < text.length; i++) {
final currentText = text.substring(startIndex, i + 1);
final width = measureText(currentText);
final breakOpportunity = _getBreakOpportunityAt(opportunities, i);
if (breakOpportunity != null &&
breakOpportunity.index <= BreakOpportunity.emergency.index) {
lastGoodBreak = i;
}
if (width > maxWidth) {
if (lastGoodBreak > startIndex) {
final endIndex = text[lastGoodBreak] == ' ' ? lastGoodBreak : lastGoodBreak + 1;
lines.add(text.substring(startIndex, endIndex));
startIndex = lastGoodBreak + 1;
i = startIndex - 1;
} else {
lines.add(text.substring(startIndex, i));
startIndex = i;
i = startIndex - 1;
}
lastGoodBreak = startIndex;
continue;
}
if (breakOpportunity == BreakOpportunity.mandatory) {
lines.add(text.substring(startIndex, i + 1));
startIndex = i + 1;
lastGoodBreak = startIndex;
}
}
if (startIndex < text.length) {
lines.add(text.substring(startIndex));
}
return lines;
}