MainAxisSize у Row и Column в Flutter
Параметр mainAxisSize
у Row
и Column
говорит, насколько виджет растягивается вдоль
главной оси. Значение MainAxisSize.max
по умолчанию: ряд или колонка занимают всё
место, которое отдал родитель.
Режим MainAxisSize.min сжимает
раскладку до
размера потомков. Ряд не тянется на всю ширину
body - он ровно по сумме элементов.
Это нужно для компактных панелей внутри
Center,
чипов в центре экрана или когда
mainAxisAlignment не должен раздвигать
соседей по пустому пространству:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
children: const [
Icon(Icons.home),
Text('Home'),
],
),
),
);
}
}
Сравните: тот же Row без min
в широком body займёт всю ширину, и
MainAxisAlignment.spaceBetween начнёт
работать между краями экрана. С min
ряд остаётся узким, а Center кладёт
его посередине:
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: const [
Text('Edge'),
Text('Edge'),
],
)
По центру экрана выведите Row с
mainAxisSize: MainAxisSize.min,
иконкой Icons.info и Text
'Help'. Блок не должен растягиваться
на всю ширину - только по содержимому.