Если у вас есть объект TextPainter
и вы уже вызвали layout
, то вы можете получить количество строк, выбрав все и вызвав getBoxesForSelection
. Каждая коробка имеет размер строки.
TextSelection selection = TextSelection(baseOffset: 0, extentOffset: text.length);
List<TextBox> boxes = textPainter.getBoxesForSelection(selection);
int numberOfLines = boxes.length;
Вот пример:
final text = 'My text line.\nThis line wraps to the next.\nAnother line.';
print(numberOfLines); // 4
К сожалению, это не работает, если существует двунаправленный текст:
final text = 'My text line.\nThis كلمة makes more boxes.\nAnother line.';
print(numberOfLines); // 6
Этого можно преодолеть, считая только коробки, расположенные вдоль одного края. Если вы заметили данные сверху, есть только четыре поля, которые имеют ребро в 0.0.
flutter: TextBox.fromLTRBD(0.0, 0.2, 171.8, 36.0, TextDirection.ltr)
flutter: TextBox.fromLTRBD(0.0, 36.5, 68.4, 72.3, TextDirection.ltr)
flutter: TextBox.fromLTRBD(68.4, 38.2, 111.5, 75.0, TextDirection.rtl)
flutter: TextBox.fromLTRBD(111.5, 36.5, 299.9, 72.3, TextDirection.ltr)
flutter: TextBox.fromLTRBD(0.0, 77.2, 92.2, 113.0, TextDirection.ltr)
flutter: TextBox.fromLTRBD(0.0, 113.2, 179.7, 149.0, TextDirection.ltr)
Хотелось бы, чтобы был метод TextPainter.numberOfLines
, но я его не нашел.
Обновление:
Существует предложение , чтобы добавить эту функцию.