Метод layout
Метод layout класса
TextPainter обязателен перед чтением размеров и рисованием.
В maxWidth задают ширину контейнера,
в minWidth - минимальную ширину строки.
Метод ничего не возвращает: после вызова заполнены
поля width, height и переносы строк.
Синтаксис
painter.layout(
minWidth: 0,
maxWidth: 200,
)
Параметры
| Параметр | Описание |
|---|---|
minWidth |
Минимальная ширина блока. По умолчанию 0.0.
|
maxWidth |
Максимальная ширина для переноса строк. |
Пример
Давайте разложим одну строку на всю ширину:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: CustomPaint(
painter: _SingleLineLayoutPainter(),
size: Size(200, 30),
),
),
),
),
);
}
class _SingleLineLayoutPainter extends CustomPainter
{
@override
void paint(Canvas canvas, Size size)
{
TextPainter painter = TextPainter(
text: TextSpan(
text: 'abcde',
style: TextStyle(color: Colors.black),
),
textDirection: TextDirection.ltr,
);
painter.layout(maxWidth: size.width);
painter.paint(canvas, Offset.zero);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
На экране 'abcde' в одной строке: layout
посчитал ширину блока под эту фразу.
Пример
Давайте перенесём текст узкой maxWidth:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: CustomPaint(
painter: _NarrowLayoutPainter(),
size: Size(60, 60),
),
),
),
),
);
}
class _NarrowLayoutPainter extends CustomPainter
{
@override
void paint(Canvas canvas, Size size)
{
TextPainter painter = TextPainter(
text: TextSpan(
text: 'abcde 12345',
style: TextStyle(color: Colors.black, fontSize: 12),
),
textDirection: TextDirection.ltr,
);
painter.layout(maxWidth: 50);
painter.paint(canvas, Offset.zero);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
На экране текст пойдёт в несколько строк: layout
перенёс слова, потому что maxWidth мала.
Смотрите также
-
метод
markNeedsLayout,
который сбрасывает результат layout -
метод
paint,
который рисует после layout -
метод
computeLineMetrics,
который даёт метрики каждой строки -
класс
TextPainter,
к которому относится метод layout