textStyleMap method
Implementation
List<MapEntry<String, TextStyle>> textStyleMap(TextStyle oStyle) {
List<MapEntry<String, TextStyle>> result = [];
/// 创建长度为text.length的List
if (inlineStyle.isEmpty || text.isEmpty) {
return result;
}
// 字符串分割点及命中的样式角标
Map<int, List<int>> splitPoint = {};
List<int>? temp;
for (int i = 0; i < text.length; i++) {
var range = <int>[];
for (int j = 0; j < inlineStyle.length; j++) {
var styleRange = inlineStyle[j];
if (styleRange.inRange(i)) {
range.add(j);
}
}
if (range.toString() != temp.toString()) {
temp = range;
splitPoint[i] = temp;
}
}
//遍历splitPoint 切割并生成样式
List<int> keys = splitPoint.keys.toList();
for (int i = 0; i < keys.length; i++) {
var start = keys[i];
List<int> style = splitPoint[start] ?? [];
var end = (i == keys.length - 1) ? text.length : keys[i + 1];
var substring = text.substring(start, end);
var sty = oStyle.copyWith();
for (var j in style) {
sty = inlineStyle[j].addStyle(sty);
}
result.add(MapEntry(substring, sty));
}
return result;
}