Справочник / Layout и API

Сначала определите задачу. Затем выбирайте тип.

Карта публичных областей LumaFlow и правила компоновки, которые объясняют большинство переполнений, неработающей прокрутки и неожиданного flex.

Родитель передаёт ограничения. Ребёнок выбирает допустимый размер.

LumaFlow использует flex layout UI Toolkit. Родитель определяет доступную ширину и высоту; ребёнок не может заставить ограниченного родителя стать больше.

Bounded

Размер имеет конечный предел

Expanded может разделить оставшееся пространство между flex-детьми.

Unbounded

Размер не ограничен по оси

ScrollView разрешает содержимому расти по оси прокрутки; делить «оставшееся» пространство там невозможно.

Скроллится тот узел, которому дали ограниченный viewport.

Чтобы прокручивался только список, внешний Column должен иметь ограниченную высоту, а Expanded(ListView) — занять остаток под заголовком. Не оборачивайте весь экран в вертикальный ScrollView.

LocationsPanel.cs
new Column(new Widget[] {
  BuildHeader(),
  new Expanded(
    new ListView<Location>(
      locations, BuildLocation))
});
Expanded нельзя помещать в unbounded ось.

Вертикальный 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.

Открыть полные сигнатуры API →