Как динамически изменить размер текста в Flutter? - PullRequest
0 голосов
/ 08 июня 2018

Я получаю фрагмент текста из API.Я хочу выделить ему определенное количество места (скажем, максимальный контейнер с шириной: 300,0 и высотой: 100,0).Иногда фрагмент текста помещается в этот контейнер с размером шрифта 30.0.В других случаях он не будет соответствовать, если я не установлю размер текста на 24.0.

Есть ли способ динамического изменения размера текста на основе его родительского контейнера?

Я построилКонтейнер с ConstrainedBox, который позволяет мне определить максимальный размер текстового пространства.Я также обернул свой текст с помощью LayoutBuilder.Я надеялся, что смогу проверить высоту пространства текста, и на основании этого определить, как изменить размер текста.Например:

    Container(
      child: ConstrainedBox(
        constraints: BoxConstraints(
          minWidth: 300.0,
          maxWidth: 300.0,
          minHeight: 30.0,
          maxHeight: 100.0,
        ),
        child: LayoutBuilder(
            builder: (BuildContext context, BoxConstraints constraints) {
          if (/* height is larger than 100.0? height is over the constraints? */) { return textWithSize24(); }
          return textWithSize30();
        }),
      ),
    ),

Как определить «высоту, которую поднял бы текст, если бы он был размером 30,0»?Может быть, я подхожу к этому неправильным путем, и я должен использовать maxLines, чтобы определить это вместо этого?Но откуда мы знаем, что мы достигли более чем maxLines?

Другой способ сделать это - использовать количество символов в моей строке, чтобы определить, когда менять размеры шрифта.Это похоже на руководство.

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Вы можете сделать это, используя пакет auto_size_text :

Container(
  child: ConstrainedBox(
    constraints: BoxConstraints(
      minWidth: 300.0,
      maxWidth: 300.0,
      minHeight: 30.0,
      maxHeight: 100.0,
    ),
    child: AutoSizeText(
      "yourText",
      style: TextStyle(fontSize: 30.0),
    ),
  ),
);

Вы также можете установить maxLines, чтобы еще больше ограничить текст, или использовать presetFontSizes, если хотите толькоразрешить определенный размер шрифта.

0 голосов
/ 01 мая 2019

Вы можете использовать FittedBox для управления текстом на основе высоты или ширины.

Например.

Просто оберните Text Виджет для FittedBox Виджет, как, Здесь я хочу изменить размер моего текста AppBar на основе ширины.

 AppBar(
    centerTitle: true,
    title: FittedBox(fit:BoxFit.fitWidth, 
    child: Text('Hey this is my long text appbar title')
    ),
  ),

Размер текста будет изменен на основе ширины AppBar.

0 голосов
/ 13 июня 2018

Вот список того, что я пробовал, который может работать для вас в зависимости от вашего варианта использования: https://github.com/flutter/flutter/issues/18431

В конечном итоге я выбрал функцию, которая устанавливает размер шрифта в зависимости от длины строки (т.е. с операторами if-else).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...