RenderBox layout을 위한 불변 layout constratins(제약)
Size는 아래의 관계가 성립할 때만, BoxConstraints를 따른다.
constraint는 아래의 관계를 꼭 만족해야 한다.
double.infinity는 각(min, max) constraint에서 유효한 값이다.
Flutter에서 Render 객체는 한번만(one-pass) 순회하는 layout 모델에 의해 배치된다. layout 모델은 render tree를 하향식으로 순회하며 constraint를 전달하고, 다시 거슬러오면서 실제 배치정보(geometry)를 render tree에게 전달한다.
box의 경우 최소/최대 넓이/높이, 4개의 숫자로 이루어진 BoxConstraints를 constraint로 가진다.
box의 배치 정보는 위에서 설명한 constraint 규칙을 반드시 만족해야 하는 Size로 구성되어 있다.
각각의 RenderBox(box 위젯으로부터 layout 모델을 제공받는 객체)는 부모로부터 BoxConstraints를 받는다. 이 후, 각 자식들을 배치하고 BoxConstraints를 만족하는 크기를 결정한다.
Render 객체는 자식을 배치하는 것과 별개로 위치를 지정한다. 주로 부모는 자식의 크기를 사용하여, 자식의 위치를 결정한다. 자식은 자신의 위치를 알지 못하고, 위치가 변경되더라도 다시 배치되거나 다시 그려질 필요가 없다.
동일한 축에 대해 최소 constraint와 최대 constraint가 같은 경우 tight constrained이라고 한다.
=> 관련: BoxConstraints.tightFor, BoxConstraints.tightForFinite, tighten, hasTightWidth, hasTightHeight, isTight.
최소 constraint가 0.0인 축은 loose라고 한다(최대 constraint와 무관하게).