Гибкие и адаптивные макеты с Flutter Row и Flex

Во Flutter виджет Rowиспользуется для горизонтального расположения дочерних виджетов в ряд. Свойство flexво Flutter позволяет вам контролировать распределение доступного пространства между дочерними виджетами Row. Вот несколько методов, которые можно использовать для достижения различных результатов с помощью гибких элементов в Row:

  1. Равное распределение: по умолчанию, если вы не укажете значение гибкости для дочерних виджетов, они будут иметь значение гибкости, равное 1, что приведет к равному распределению доступного пространства между ними. Например:

    Row(
    children: [
    Expanded(child: Container(color: Colors.red)),
    Expanded(child: Container(color: Colors.blue)),
    Expanded(child: Container(color: Colors.green)),
    ],
    )
  2. Неравномерное распределение: вы можете установить разные значения гибкости для дочерних виджетов, чтобы распределить доступное пространство неравномерно. Дочерние виджеты с более высокими значениями гибкости будут занимать больше места по сравнению с виджетами с более низкими значениями гибкости. Например:

    Row(
    children: [
    Expanded(flex: 2, child: Container(color: Colors.red)),
    Expanded(flex: 1, child: Container(color: Colors.blue)),
    Expanded(flex: 3, child: Container(color: Colors.green)),
    ],
    )
  3. Фиксированный размер. Если вы хотите, чтобы дочерний виджет имел фиксированный размер и не участвовал в гибком распределении, вы можете удалить виджет Расширенныйи напрямую использовать виджет фиксированного размера, например Контейнерс указанной шириной или высотой. Например:

    Row(
    children: [
    Container(width: 100, height: 50, color: Colors.red),
    Expanded(child: Container(color: Colors.blue)),
    Container(width: 150, height: 50, color: Colors.green),
    ],
    )
  4. Гибкая переноска: если дочерних виджетов больше, чем может поместиться в одну строку, вы можете включить гибкую переноску, чтобы переносить дополнительные виджеты на следующую строку. Этого можно добиться, установив для свойства wrapвиджета Rowзначение true. Например:

    Row(
    wrap: true,
    children: [
    Container(width: 100, height: 50, color: Colors.red),
    Container(width: 100, height: 50, color: Colors.blue),
    Container(width: 100, height: 50, color: Colors.green),
    Container(width: 100, height: 50, color: Colors.yellow),
    ],
    )