flutter - 有没有办法在渲染之前计算文本宽度?
问题描述
我有一个固定大小的盒子,我需要传递高度值。
在框内,我有一个可能溢出的 Text 小部件,因此我需要设置 'maxLines' 2。但是,由于框高度是固定的,因此 Text 小部件不会占用 2 行。
我可以将更大的值传递给框的高度,但如果 Text 小部件只占用 1 行,它看起来不太好。
如果我可以计算 Text 小部件的总像素然后通过将其与固定大小框的宽度进行比较来计算出需要多少行 Text 小部件,那就太好了。
SizedBox(
child: Text(
title,
style: Theme.of(context).textTheme.headline6,
maxLines: 2,
),
width: 300,
height: 60,
),
例如
height: Theme.of(context).textTheme.headline6.fontSize * title.length > 300? 72 : 60
解决方案
这是答案
Size calcTextSize(String text, TextStyle style) {
final TextPainter textPainter = TextPainter(
text: TextSpan(text: text, style: style),
textDirection: TextDirection.ltr,
textScaleFactor: WidgetsBinding.instance.window.textScaleFactor,
)..layout();
return textPainter.size;
}
final double textWidth = calcTextSize(text, TextStyle(fontSize: fontSize)).width;
推荐阅读
- laravel - 如何测试监听器发送的 Laravel 通知?
- powershell - Azure CLI (PS) | az storage blob 生成-sas | HTTPS连接失败
- javascript - 从 AsyncStorage 读取,解析数组,将字符串转换为日期对象
- c++ - fd 无效后,阻塞模式下的 recvmsg 仍然有效
- symfony - symfony 功能测试:更改基本 url
- javascript - 减少对象数组并计算其数组的值
- c++ - 如何使用 Qt 发出简单的 Http 请求?http 请求在 URL 中包含百分比编码
- pentaho - 如何并行运行 Pentaho 转换并限制执行器数量
- css - 无法使用 LESS 更改主按钮颜色(ant.design)
- r - RMarkdown:使用循环在同一块中的多个ggplots