flutter - 使用 Flutter 将文本基线与列内的文本对齐
问题描述
我在对齐小部件时遇到问题。我在这里看到过有关类似问题的问题,但是,它们似乎都不适用于我的特定任务。我正在尝试创建一个包含一个图标和两个文本小部件的小部件。该图标应该位于第一个文本小部件的中心,而另一个文本小部件应该与第一个文本小部件的基线对齐。
我这样做的方法是将图标和第一个文本小部件放在一列中,然后将该列与第二个文本小部件一起放在一行中。我在行小部件中使用crossAxisAlignment: CrossAxisAlignment.baseline
和textBaseline: TextBaseline.ideographic
,但由于某种原因,第二个文本与图标对齐。它看起来像这样:
如果我改为使用crossAxisAlignment: CrossAxisAlignment.end
文本小部件,则无法正确对齐:
我试图将文本小部件放在一行中,并将它们与图标一起放在一列中,但是图标不再以第一个文本小部件为中心:
这是用于第一张图像的代码,其他图像只是相同代码的重新排列。
return Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.ideographic,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
widget.icon,
color: color_text_highlight,
size: 20,
),
Text(
widget.data,
style: TextStyle(
fontSize: 28,
fontFamily: 'Quicksand',
color: color_text_highlight,
),
),
],
),
SizedBox(width: 5),
Text(
widget.label,
style: TextStyle(
fontSize: 12,
fontFamily: 'Roboto',
color: color_text_dark,
)
),
],
);
任何帮助表示赞赏!
解决方案
Column
将自己的基线定义为其第一个孩子的基线*。这就是为什么右侧的标签与图标底部对齐的原因:
一个简单的解决方法是使“17:59”成为 Column 的第一个子项(图标现在会在下方),然后使用 VerticalDirection.up 将它们交换回来:
Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Column(
mainAxisSize: MainAxisSize.min,
verticalDirection: VerticalDirection.up, // <-- reverse direction
children: [
Text('17:59', style: TextStyle(fontSize: 32)), // <-- first child
Icon(Icons.timer),
],
),
Text('mm:ss'),
],
)
* 实际上,第一个拥有基线的孩子,无论如何Icon
都有它
推荐阅读
- c# - 在标签 C# 中显示 Json 变量
- ios - Apple Silicon M1 上的 React Native - 链接库“libPods-ProjectName.a”缺少此目标所需的一个或多个架构:x86_64
- php - Laravel 迁移 - 一般错误:1215 无法添加外键约束
- html - 悬停状态前和变换比例后图像模糊
- parameters - 如何在 ADF 中获取 Azure 订阅和租户
- python-3.x - 在 SQLAlchemy 中关闭会话
- javascript - document.querySelectorAll() 的 TS-lint 错误
- excel - Excel - 我们如何使用 LAMBDA() 替换单元格中的多个字符或整个单词
- python - 使用 if 语句在 Python 中使用 Turtle 匹配 x/y 坐标
- c - 确保您正在通过 scanf 读取字符