У меня есть виджет Column
с двумя виджетами TextField
качестве детей, и я хочу иметь некоторое пространство между ними.
Я уже пробовал mainAxisAlignment: MainAxisAlignment.spaceAround
, но результат оказался не тем, что я хотел.
У меня есть виджет Column
с двумя виджетами TextField
качестве детей, и я хочу иметь некоторое пространство между ними.
Я уже пробовал mainAxisAlignment: MainAxisAlignment.spaceAround
, но результат оказался не тем, что я хотел.
Вы можете использовать виджет Padding
между этими двумя виджетами или обернуть эти виджеты виджетом Padding
.
Вы можете поместить SizedBox
с определенной height
между виджетами, например так:
Column(
children: <Widget>[
FirstWidget(),
SizedBox(height: 100),
SecondWidget(),
]
)
Зачем предпочитать это оборачивать виджеты в Padding
? Читаемость! Меньше визуального шаблона, меньше отступов, и код соответствует типичному порядку чтения.
Просто используйте отступы, чтобы обернуть это так:
Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(8.0),
child: Text('Hello World!'),
),
Padding(
padding: EdgeInsets.all(8.0),
child: Text('Hello World2!'),
)
]);
Вы также можете использовать Container (padding...) или SizeBox (height: xx). Последний является наиболее распространенным, но он будет зависеть от того, как вы хотите управлять пространством ваших виджетов, мне нравится использовать отступы, если пространство действительно является частью виджета, и использовать sizebox для списков, например.
Вы можете использовать виджет Wrap()
вместо Column()
чтобы добавить пространство между дочерними виджетами. И использовать свойство spacing, чтобы обеспечить равный интервал между дочерними виджетами.
Wrap(
spacing: 20, // to apply margin horizontally
runSpacing: 20, // to apply margin vertically
children: <Widget>[
Text('child 1'),
Text('child 2')
]
)
Аналогично тому, как SizedBox используется выше для удобства чтения кода, вы можете использовать виджет Padding таким же образом, и вам не нужно делать его родительским виджетом для любого из дочерних элементов Column.
Column(
children: <Widget>[
FirstWidget(),
Padding(padding: EdgeInsets.only(top: 40.0)),
SecondWidget(),
]
)
Column(
children: <Widget>[
FirstWidget(),
Spacer(),
SecondWidget(),
]
)
Spacer создает гибкое пространство для вставки в виджет [Flexible]. (Как столбец)
Вы можете решить эту проблему по-другому.
Если вы используете строку/столбец, тогда вы должны использовать mainAxisAlignment: MainAxisAlignment.spaceEvenly
Если вы используете Wrap Widget, вы должны использовать runSpacing: 5, spacing: 10,
В любом месте вы можете использовать SizeBox()