如何在Flutter中动态调整文本大小?

问题描述 投票:5回答:3

我从API中检索一段文本。我想为它分配一定量的空间(比如一个宽度为300.0且高度为100.0的最大容器)。有时,这段文本适合此容器,字体大小为30.0。在其他时候,除非我将文本大小设置为24.0,否则它将不适合。

有没有办法根据其父容器空间动态调整文本大小?

我已经构建了一个带有ConstrainedBox的Container,它允许我定义文本空间的最大大小。我还用LayoutBuilder包装了我的Text。我希望我可以检查文本空间的高度,并在此基础上确定如何调整文本大小。像这样:

    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

另一种方法是使用我的String中的字符数来确定何时更改字体大小。这似乎是一种手册。

flutter
3个回答
11
投票

你可以使用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


5
投票

您可以使用FittedBox根据高度或宽度管理文本。

对于Ex。

只需将你的qazxsw poi小部件包装到qazxsw poi小部件就像,在这里我想根据宽度调整我的AppBar文本。

Text

文本将根据AppBar的宽度调整大小。


3
投票

以下是我尝试过的可能适合您的事项列表,具体取决于您的用例:FittedBox

最后,我使用了一个函数,该函数根据String的长度设置字体大小(即使用if-else语句)。

© www.soinside.com 2019 - 2024. All rights reserved.