在我的布局中,我连续有两个小部件,一个文本和一个图标。
如下所示,假设*表示图标,并使用“-”表示该行:
----------------------------
Text *
----------------------------
如何使我的文本居中于整行,图标位于右端?
答案 0 :(得分:8)
您需要注意的主要事情是,如果您不想使用Stack
,则应该在左右两边提供相同的占用宽度的小部件。
我可以使用Expanded
和Padding
Row(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.only(left: 32.0),
child: Text(
"Text",
textAlign: TextAlign.center,
),
),
),
Icon(Icons.add, size: 32.0,)
],
)
或带有Row
的{{1}}和mainAxisAlignment
Container
,或者在左侧加上Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(width: 32.0, height: 0.0),
Text("Text"),
Icon(Icons.add, size: 32.0)
],
)
和Expanded
而不是填充:)。考虑到Icon占用的空间,左侧的填充或多余容器是使textAlign真正使文本在行中居中的地方。
答案 1 :(得分:8)
只需在左侧/右侧使用Expanded
和Spacer
小部件,然后将小部件放在Expanded
内:
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Spacer(),
Text('Text'),
Expanded(
child: Text('*'),
),
),
],
),
答案 2 :(得分:5)
1。使用Row
(虽然不是很灵活)
Row(
children: <Widget>[
Expanded(child: Center(child: Text('Center'))),
Text("#"),
],
)
2。使用Stack
(灵活)
IntrinsicHeight(
child: Stack(
children: [
Align(child: Text('Center')),
Positioned(right: 0, child: Text('#')),
],
),
)
答案 3 :(得分:1)
我发现有必要使用Stack
来使Text真正居中:
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Stack(
alignment: Alignment.center,
children: [
Align(
alignment: Alignment.center,
child: Text('Text'),
),
Align(
alignment: Alignment.centerRight,
child: Text('*'),
)
],
),
],
);