Виджет Flexible в Flutter
Виджет
Flexible,
как и Expanded,
участвует в делении места в Row
или Column
по flex. Разница в том, обязан ли
потомок заполнить выделенную долю целиком.
Виджет Expanded - это Flexible с
fit: FlexFit.tight: потомок должен
растянуться на всю отведённую ширину или
высоту. При FlexFit.loose виджет
получает максимум до своей доли, но может
остаться меньше, если сам хочет компактный
размер:
Row(
children: [
Flexible(
fit: FlexFit.loose,
child: Container(
color: Colors.blue,
child: const Text('Narrow'),
),
),
Flexible(
fit: FlexFit.tight,
child: Container(
color: Colors.green,
child: const Text('Full share'),
),
),
],
)
Режим loose удобен для кнопок и чипов:
ряд
делит пространство справедливо, но подпись
не растягивается без нужды. Режим tight
ведёт себя как Expanded - фон или
Container
заполняет ячейку:
Row(
children: [
const Text('Filter'),
Flexible(
flex: 1,
fit: FlexFit.loose,
child: Align(
alignment: Alignment.centerRight,
child: TextButton(
onPressed: () {},
child: const Text('Reset'),
),
),
),
],
)
Соберите Row: слева Text
'City', справа Flexible
с fit: FlexFit.loose и Text
'Moscow', прижатым к правому краю
через Align.
Подпись города не должна растягиваться на
всю ширину - только занять нужное место
в своей доле.