exceedsMaxLines static method
bool
exceedsMaxLines({
- required Delta delta,
- required TextStyle baseStyle,
- required double maxWidth,
- required int maxLines,
- MentionConfig? mentionConfig,
- EmojiConfig? emojiConfig,
- TextDirection textDirection = TextDirection.ltr,
- TextScaler textScaler = TextScaler.noScaling,
Проверяет, не помещается ли delta в maxLines визуальных строк
при ширине maxWidth и стиле baseStyle.
В отличие от DeltaExtensions.lineCount (количество символов '\n'),
учитывает перенос длинных абзацев по словам — то есть реальную раскладку
текста, как её делает DeltaTextView. Используется для решения, нужна ли
кнопка «Развернуть».
Эмбеды (упоминания, emoji) для измерения конвертируются в текст
(@имя и сам символ emoji), поэтому ширина чипа/emoji оценивается
приблизительно — этого достаточно для булева результата.
Implementation
static bool exceedsMaxLines({
required Delta delta,
required TextStyle baseStyle,
required double maxWidth,
required int maxLines,
MentionConfig? mentionConfig,
EmojiConfig? emojiConfig,
TextDirection textDirection = TextDirection.ltr,
TextScaler textScaler = TextScaler.noScaling,
}) {
if (maxLines <= 0 || maxWidth <= 0 || !maxWidth.isFinite) return false;
final plainDelta = deltaWithMentionsAsText(
deltaWithEmojisAsText(delta, emojiConfig: emojiConfig),
mentionConfig: mentionConfig,
);
final spans = parseDeltaToSpans(
delta: plainDelta,
baseStyle: baseStyle,
applyBlockPrefixes: true,
);
final painter = TextPainter(
text: TextSpan(children: spans),
textDirection: textDirection,
maxLines: maxLines,
textScaler: textScaler,
)..layout(maxWidth: maxWidth);
final exceeds = painter.didExceedMaxLines;
painter.dispose();
return exceeds;
}