Почему строка не находится по центру по горизонтали внутри столбца

Aug 17 2020

Как мы знаем, по умолчанию столбец центрирует своих дочерних элементов по горизонтали, если он имеет полную ширину. Но когда я поместил две карты и одну строку внутри столбца, две карты помещаются горизонтально по центру по флаттеру, но строка остается такой же в своей начальной позиции? Почему?
Я думаю, что row должен быть горизонтально по центру, потому что в моем случае это дочерний элемент Column, но это не так.

Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter App'),
      ),
      body: Container(
        color: Colors.purple,
        height: double.infinity,
        child: Column(
          //  mainAxisAlignment: MainAxisAlignment.center,
          //  crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Card(
              child: Text(
                'Chart',
                style: TextStyle(fontSize: 20.0),
              ),
              elevation: 5,
              color: Colors.blue,
            ),
            Card(
              child: Text(
                'list of tx',
                style: TextStyle(
                  fontSize: 20.0,
                ),
              ),
              color: Colors.purple,
            ),
            Row(
              children: [
                Text('this is row'),
              ],
            ),
          ],
        ),
      ),
    );
  }
}



вывод этого кода

Ответы

1 Uni Aug 17 2020 at 16:14

Это происходит потому, что по умолчанию Row занимает все горизонтальное пространство. Вы можете исправить это, указав, чтобы он занимал как можно меньше места:

Row(
    mainAxisSize: MainAxisSize.min,
    ...
)

Установка mainAxisAlignmentдля строки значения MainAxisAlignment.centerбудет работать, только если внутри строки есть один виджет. Он только говорит своим детям идти в центр.

2 faroukosama Aug 17 2020 at 16:17

По умолчанию mainAxisSizeсвойство находится MainAxisSize.maxв виджете « Строка». Вам нужно просто изменить его на « MainAxisSize.minЧтобы повлиять на родительский виджет, который в этом примере является столбцом».

Row(
    mainAxisSize: MainAxisSize.min,
    ...
)
1 Yash Aug 17 2020 at 16:08

Попробуйте передать mainAxisAlignmentаргумент вашей строке. Например

Row(
    mainAxisAlignment: MainAxisAlignment.center,
    ...
)

Это сделает дочерние элементы ряда центрированными.