flutter - 将文本包装在一行中,如果有可用空间,则用分隔符填充它
问题描述
我有一个Row
,其中包含一个 Text 和一个扩展Divider
. 通常文本很短,所以分隔线占用了很多宽度。
Row (
children: <Widget>[
Text('some text'),
Expanded(
child: Divider()
)
]
)
但有时文本会变得很长,所以它需要比宽度更多的时间。在这种情况下,它应该换行到第二行。我也尝试将其包装Text
成一个Expanded
,但在这种情况下,无论文本有多长,分隔线都会占用一半的空间。
我怎样才能实现这种行为(破折号应该是分隔线):
Short Text ---------------
Loooooooooooooong Text ---
Tooooooooooooooooooo ----- // <- Divider should be vertically centered
Long Text
解决方案
使用BoxConstraints
,将 替换为Container
您的分隔线,您会看到它也是垂直对齐的。
截屏:
代码:
@override
Widget build(BuildContext context) {
final text = 'Tooooooooooooooooooooooooooooooooooooooooooooooooo Long Text ';
final screenWidth = MediaQuery.of(context).size.width;
final minDividerWidth = 30.0;
final dividerHeight = 30.0;
return Scaffold(
body: Center(
child: Row(
children: <Widget>[
ConstrainedBox(
constraints: BoxConstraints(maxWidth: screenWidth - minDividerWidth),
child: Text(text),
),
Expanded(
child: Container(
height: dividerHeight,
color: Colors.red,
),
),
],
),
),
);
}
推荐阅读
- docker - 网络模式主机时 Docker 容器极慢
- c# - 默认个人资料图片 - MicrosoftGraph、React
- jbpm - jBPM:在 JRE 上而不是在 JDK 上运行
- webpack - webpack 中没有用于动态导入的地图文件
- packaging - 我已经使用 nw.js 创建了一个应用程序包。我如何创建一个 dmg 文件来分发它?
- angular - 为什么 TS 中的“setValue”方法不起作用
- amazon-s3 - 使用存储在 Amazon s3 上的公钥获取错误 EXTERNAL_OAUTH_JWS_CANT_RETRIEVE_PUBLIC_KEY
- wix - 使用 Wix 捆绑升级 MSI 卸载现有应用程序
- android - 在 Google oauth 上执行 android 身份验证时,如何在 google 服务器(google idP)上使用 SHA1 指纹和包名称进行验证?
- ethereum - @MetaMask / detect-provider:处理帐户已更改