Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
109 of 1024 menu
◀ ▶

Метод 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
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить