RichText

Последнее обновление: 30.01.2021

Виджет RichText позволяет выводить текст с разным стилевым оформлением. Это достигается благодаря тому, что каждый отдельный кусок текста в RichText представляет объект TextSpan, для которого можно настроить свой стиль.

Для создания RichText применяется следующий конструктор:

RichText({Key key, @required InlineSpan text, TextAlign textAlign: TextAlign.start, TextDirection textDirection, bool softWrap: true, 
TextOverflow overflow: TextOverflow.clip, double textScaleFactor: 1.0, int maxLines, Locale locale, StrutStyle strutStyle, 
TextWidthBasis textWidthBasis: TextWidthBasis.parent, TextHeightBehavior textHeightBehavior})

Большинство параметров конструктора совпадают с параметрами конструктора класса Text. Соответственно мы их можем использовать также, как и при создании и настройке виджета Text. Рассмотрим лишь те параметры, которые отличаются.

Прежде всего, текст задается с помощью параметра text, который представляет объект InlineSpan. В реальности, как правило, этому параметру передается объект класса TextSpan (который унаследован от InlineSpan). По сути TextSpan - это некий кускок текста.

Для создания TextSpan применяется следующий конструктор:

TextSpan({String text, List<InlineSpan> children, TextStyle style, GestureRecognizer recognizer, String semanticsLabel})

Первый параметр - text представляет собственно текст объекта. Но кроме этого, с помощью параметра children можно вложить дополнительные объекты InlineSpan (в том числе объекты TextSpan), которые также могут содержать текст. Третий параметр - style позволяет задать для текста определенный стиль.

Рассмотрим простейший RichText:

import 'package:flutter/material.dart';

void main() {
  runApp(Container(
    padding: EdgeInsets.only(top:25, left:10, right:10),
    color: Colors.teal,
    child: RichText(
      textDirection: TextDirection.ltr,
        text: TextSpan(
          text: "Hello Flutter",
          style: TextStyle(fontSize: 20),
          children: <TextSpan>[
            TextSpan(text: " from ", style: TextStyle(color: Colors.red)),
            TextSpan(text: "Metanit.com", style: TextStyle(fontWeight: FontWeight.bold)),
          ],
      )
     )
    )
  );
}
RichText и TextSpan в Flutter

В данном случае весь текст в RichText инкапсулирован во вложенном виджете TextSpan, который, в свою очередь, сам содержит еще объекта TextSpan. Фактически текст из обоих вложенных TextSpan просто добавляется к тексту из родительского TextSpan.

Следует учитывать, что стиль родительского TextSpan автоматически распространяется на все дочерние объкты TextSpan. Так, в примере выше мы видим, что установка высоты шрифта style: TextStyle(fontSize: 20) фактически применяется ко всем объктам TextSpan. На уровне каждого дочернего TextSpan же можно определить свой специфический стиль или изменить унаследованные от родительского TextSpan стилевые настройки.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850