textStyleMap method

List<MapEntry<String, TextStyle>> textStyleMap(
  1. TextStyle oStyle
)

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;
}