Column на всю ширину экрана во Flutter

Небольшая шпаргалка о том как сделать колонку во Флаттер на всю ширину экрана.

Например я хочу сверстать страницу на которой есть текст и 3 кнопки, все это должно располагаться по центру экрана. На даже если указать

mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,

содержимое не будет находится по центру из-за того, что колонка не растягивается на всю ширину экрана:

Column на всю ширину экрана во Flutter

Вот код колонки:

Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text(userLoginStatus),
            const SizedBox(height: 20.0,),
            ElevatedButton(onPressed: null, child: Text('Sign up')),
            const SizedBox(height: 20.0,),
            ElevatedButton(onPressed: null, child: Text('Sign in')),
            const SizedBox(height: 20.0,),
            ElevatedButton(onPressed: null, child: Text('Sign out')),
          ],
        )

Чтобы колонка занимала всю ширину экрана или родительского контейнера, нужно обернуть её в виджет Expanded или SizedBox.expand в зависимости от контекста. Вот несколько подходов:

Использование Expanded (в составе Column или Row)

Если ваша колонка является дочерним элементом другого Column, Row или Flex, используйте Expanded:

Column(
  children: [
    Expanded(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
		crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Text(userLoginStatus),
          SizedBox(height: 20.0),
          ElevatedButton(onPressed: null, child: Text('data')),
        ],
      ),
    ),
  ],
)

Использование SizedBox.expand

Если вы хотите, чтобы колонка заняла всю ширину и высоту (или только ширину):

SizedBox.expand(
  child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
	crossAxisAlignment: CrossAxisAlignment.center,
    children: [
      Text(userLoginStatus),
      SizedBox(height: 20.0),
      ElevatedButton(onPressed: null, child: Text('data')),
    ],
  ),
)

Это как раз то, что нужно:

Column на всю ширину экрана во Flutter

Использование width с Container

Если нужно задать только ширину, можно обернуть колонку в Container и указать ширину через double.infinity:

Container(
  width: double.infinity, // Занимает всю ширину экрана
  child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
	crossAxisAlignment: CrossAxisAlignment.center,
    children: [
      Text(userLoginStatus),
      SizedBox(height: 20.0),
      ElevatedButton(onPressed: null, child: Text('data')),
    ],
  ),
)

Использование Align с шириной

Для случаев, когда колонка должна быть внутри ограниченного пространства, можно обернуть её в Align и задать ширину вручную:

Align(
  alignment: Alignment.center, // Центрирование колонки
  child: SizedBox(
    width: double.infinity, // Задаёт ширину по всей доступной площади
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
	  crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        Text(userLoginStatus),
        SizedBox(height: 20.0),
        ElevatedButton(onPressed: null, child: Text('data')),
      ],
    ),
  ),
)

Какой подход выбрать?

Expanded — если колонка является дочерним элементом внутри Column или Row.
SizedBox.expand — если вам нужно занять всё доступное пространство.
Container с width: double.infinity — если вы хотите только задать ширину.


Выбор зависит от вашего общего макета.

Хостинг для ваших проектов