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

Метод markNeedsLayout

Метод markNeedsLayout класса TextPainter сбрасывает результат прошлого layout. Вызывают после смены text или textDirection, затем снова вызывают layout. Метод ничего не возвращает.

Синтаксис

painter.markNeedsLayout()

Пример

Давайте сменим текст и перерисуем подпись:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: CustomPaint( painter: _RelayoutPainter(), size: Size(120, 30), ), ), ), ), ); } class _RelayoutPainter 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.text = TextSpan( text: '12345', style: TextStyle(color: Colors.blue), ); painter.markNeedsLayout(); painter.layout(maxWidth: size.width); painter.paint(canvas, Offset.zero); } @override bool shouldRepaint(covariant CustomPainter oldDelegate) => false; }

На экране синяя '12345' вместо старой строки: markNeedsLayout заставил заново вызвать layout.

Пример

Давайте сменим направление текста и переложим блок:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: CustomPaint( painter: _DirectionPainter(), size: Size(120, 30), ), ), ), ), ); } class _DirectionPainter 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.textDirection = TextDirection.rtl; painter.markNeedsLayout(); painter.layout(maxWidth: size.width); painter.paint(canvas, Offset.zero); } @override bool shouldRepaint(covariant CustomPainter oldDelegate) => false; }

На экране порядок символов учтёт RTL после повторного layout.

Смотрите также

  • метод layout,
    который выполняет расчёт после markNeedsLayout
  • метод paint,
    который нельзя вызывать без актуального layout
  • класс TextPainter,
    к которому относится метод
  • класс TextSpan,
    смена которого часто требует markNeedsLayout
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить