我从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中的字符数来确定何时更改字体大小。这似乎是一种手册。
你可以使用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
。
您可以使用FittedBox
根据高度或宽度管理文本。
对于Ex。
只需将你的qazxsw poi小部件包装到qazxsw poi小部件就像,在这里我想根据宽度调整我的AppBar文本。
Text
文本将根据AppBar的宽度调整大小。
以下是我尝试过的可能适合您的事项列表,具体取决于您的用例:FittedBox
最后,我使用了一个函数,该函数根据String的长度设置字体大小(即使用if-else语句)。