Родитель передаёт ограничения. Ребёнок выбирает допустимый размер.
LumaFlow использует flex layout UI Toolkit. Родитель определяет доступную ширину и высоту; ребёнок не может заставить ограниченного родителя стать больше.
Размер имеет конечный предел
Expanded может разделить оставшееся пространство между flex-детьми.
Размер не ограничен по оси
ScrollView разрешает содержимому расти по оси прокрутки; делить «оставшееся» пространство там невозможно.
Скроллится тот узел, которому дали ограниченный viewport.
Чтобы прокручивался только список, внешний Column должен иметь ограниченную высоту, а Expanded(ListView) — занять остаток под заголовком. Не оборачивайте весь экран в вертикальный ScrollView.
new Column(new Widget[] {
BuildHeader(),
new Expanded(
new ListView<Location>(
locations, BuildLocation))
});Вертикальный ScrollView сообщает содержимому, что оно может иметь любую высоту. Expanded при этом не знает, какое «оставшееся» пространство делить.
Mount, описание и реактивное обновление.
LumaFlow.MountСоздать одно смонтированное дерево внутри owned root.MountHandleDispose, Rebuild, Restart и diagnostics.Widget / WidgetKeyНеизменяемое описание и стабильная идентичность соседей.State<T>Явно хранимое реактивное значение.ReactiveBuilder<T>Локальная ветвь, перестраиваемая при изменении State.Тип выбирается по роли в композиции.
Row / ColumnFlex-композиция по горизонтали или вертикали.Expanded / Flexible / SpacerРаспределение ограниченного свободного места.SizedBox / ConstrainedBoxЯвные размеры и границы.LayoutBuilderВыбор композиции по реальным constraints конкретной ветви.ScrollViewНебольшое содержимое неизвестной длины.ListView<T>Виртуализированная растущая коллекция.Нативное поведение с внешним состоянием.
Button, IconButton, TextField, Checkbox, Radio<T>, Switch, Slider и Dropdown<T> сохраняют UI Toolkit input/focus behavior. FormState и FormField<T> делают валидацию явной.
История маршрутов и временный UI хранятся отдельно.
Navigator, Route и NavigationSnapshot управляют экранами. OverlayController, Dialog, Toast, TooltipAnchor и drawer управляют временными слоями.
Конфигурация передаётся через context.
Theme, MediaQuery и Localizations задают tree-scoped данные. Semantics добавляет смысл, TextScaler управляет читаемым масштабом, а implicit animation widgets учитывают reduced motion.