[英]In a Flutter Row, is there a way to center-align a child when using MainAxisAlignment.spaceBetween?
我有一個填充一個Container
的Row
,它可能有一個到三個固定大小的孩子。 我正在使用MainAxisAlignment.spaceBetween
,當有多個孩子時,它按預期工作:有兩個孩子,他們最終在邊緣,如果有三個,兩個在邊緣,一個在中心。
Container(
width: 200,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(width: 30, height: 20),
SizedBox(width: 30, height: 20),
SizedBox(width: 30, height: 20),
],
),
);
但是,當只有一個孩子時,它會放在Row
的開頭,我想把它放在中間。 我當然可以通過事先檢查孩子的數量並將MainAxisAlignment
更改為center
來實現我所需要的,但我想知道是否有更優雅的方式來結合spaceBetween
和center
。
將crossAxisAlignment: CrossAxisAlignment.center,
屬性添加到 Raw Widget:
編碼:
Container(
width: 200,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(width: 30, height: 20),
SizedBox(width: 30, height: 20),
SizedBox(width: 30, height: 20),
],
),
);
您可以使用MainAxisAlignment.spaceEvenly
(或spaceAround
)將單個孩子居中。 要讓兩個孩子左右浮動(因為在spaceEvenly
中左右會有多余的空格),可以將Spacer
添加到Row
的孩子(適用於任意數量的孩子)。
代碼:
List<Widget> rowChildren = [
SizedBox(width: 30, height: 20, child: Container(color: Colors.red)),
SizedBox(width: 30, height: 20, child: Container(color: Colors.yellow)),
SizedBox(width: 30, height: 20, child: Container(color: Colors.green)),
];
@override
void initState() {
super.initState();
int l = rowChildren.length;
for (int i = 1; i < 2 * l - 1; i += 2) {
rowChildren.insert(i, Spacer()); // adding Spacer between the two children
}
}
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: rowChildren
),
結果(一個孩子):
結果(兩個孩子):
結果(三個孩子):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.