Оценок пока нет Работа с рамками ограничений

[info] Примечание. Возможно, вы попадете на эту страницу, если платформа обнаружит проблему, связанную с ограничениями на блокировку.[/info]

Во Flutter виджеты отображаются их базовыми объектами RenderBox. Боксы рендеринга получают ограничения от своего родителя и сами определяют размер в пределах этих ограничений

  • Ограничения состоят из минимальной и максимальной ширины и высоты.
  • Размеры состоят из определенной ширины и высоты.

Как правило, существует три вида блоков, с точки зрения того, как они справляются со своими ограничениями:

  • Те, которые пытаются быть как можно большими. Например, поля, используемые Center и ListView.
  • Те, которые пытаются быть того же размера, что и их дети. Например, поля, используемые Transform и Opacity.
  • Те, которые пытаются быть определенного размера. Например, поля, используемые Image и Text.

Некоторые виджеты, например, контейнер Container, варьируются от типа к типу в зависимости от аргументов конструктора. В случае Container по умолчанию он пытается быть как можно большим, но если вы, например, задаете ему ширину width, он пытается соблюдать это значение и быть именно этого размера.

Другие, например Row и Column (flex-боксы), различаются в зависимости от заданных ограничений, как описано ниже в разделе «Flex».

Ограничения иногда являются «жесткими», что означает, что они не оставляют места для блока визуализации, чтобы выбрать размер (например, если минимальная и максимальная ширина одинаковы, говорят, что она имеет узкую ширину). Основным примером этого является виджет App, который содержится в классе RenderView: поле, используемое дочерним элементом, возвращаемым функцией build приложения, имеет ограничение, которое заставляет его точно заполнять область содержимого приложения (обычно весь экран). ). Многие из боксов во Flutter, особенно те, в которых есть только один дочерний элемент, передают свои ограничения своим дочерним элементам. Это означает, что если вы вложите кучу блоков друг в друга в корень дерева рендеринга вашего приложения, все они точно впишутся друг в друга под воздействием этих жестких ограничений.

Некоторые блоки «ослабляют» ограничения, то есть максимум сохраняется, но минимум удаляется. Например, виджет Center.

Безграничные оганичения

В определенных ситуациях ограничение, которое дается блоку, является неограниченным или бесконечным. Это означает, что для максимальной ширины или максимальной высоты задано значение double.INFINITY.

Ящик, который пытается быть как можно большего размера, не будет работать бесполезно, если ему дано неограниченное ограничение, а в режиме отладки такая комбинация вызывает исключение, которое указывает на этот файл.

Наиболее распространены случаи, когда блок визуализации обнаруживает себя с бесконечными ограничениями, находясь внутри блоков Flex (Row и Column) и внутри прокручиваемых областей (ListView и другие подклассы ScrollView).

В частности, ListView пытается расширяться, чтобы соответствовать пространству, доступному в его поперечном направлении (например, если это блок с вертикальной прокруткой, он пытается быть таким же широким, как и его родитель). Если вы вкладываете ListView с вертикальной прокруткой в ListView с горизонтальной прокруткой, внутренний пытается сделать максимально широкий, бесконечно широкий, поскольку внешний прокручивается в этом направлении.

Flex

Сами блоки Flex (Row и Column) ведут себя по-разному в зависимости от того, находятся ли они в ограниченных или неограниченных ограничениях в заданном направлении.

В ограниченных ограничениях они стараются быть как можно большими в этом направлении.

В бесконечных ограничениях они пытаются подогнать своих дочерних элементов в этом направлении. В этом случае вы не можете установить flex для дочерних элементов в любое значение, кроме 0 (по умолчанию). В библиотеке виджетов это означает, что вы не можете использовать Expanded, когда flex-блок находится внутри другого flex-бокса или внутри прокручиваемого. Если вы это сделаете, вы получите сообщение об исключении, указывающее вам на этот документ.

В поперечном направлении, то есть по ширине для столбца Column(вертикальное изгибание) и по высоте для строки Row(горизонтальное изгибание), они никогда не должны быть неограниченными, иначе они не смогут разумно выровнять своих дочерних элементов.

Пожалуйста, оцените материал

WebSofter

Web - технологии