Foggy day

[Flutter] Constraints 이해하기 본문

Flutter/Flutter document

[Flutter] Constraints 이해하기

jinhan38 2023. 3. 29. 00:14

 

이번 포스팅에서는 Flutter의 Constraints에 대해 알아보겠습니다. 

 

Flutter 개발자들은 작업을 하면서 overflow 에러를 자주 볼 것입니다. 그리고 특정 위젯이 원하는 위치와 사이즈로 그려지지 않아서 많은 시간을 낭비하기도 할 것입니다. 이러한 시간을 절약하고, 어려움을 이겨내기 위해서는 Flutter의 constraints 규칙을 이해하는 것이 도움 될 수 있습니다.

 

 

 

 

1. constraints의 핵심

2. Limitations

3. Tight vs loose constraints

 

 

 

 

1. constraints의 핵심

Flutter constraints의 핵심은 다음 문장입니다. Flutter의 위젯 트리를 어떻게 구성하고 있냐고 질문한다면 아래의 문장이 가장 핵심이라고 할 수 있습니다. 물론 룰을 모른다면 이해하기 어려울 것입니다. 

 

Constraints go down. Sizes go up. Parent sets position.

 

좀 더 자세하게 풀어보겠습니다.

  • Constraints go down : 위젯은 제약 조건(constraints)를 부모에게 받아옵니다. 제약조건은 min/max width, min/max height 4가지가 있습니다. 
  • Sizes go up : 위젯은 children(자식 위젯들)에게 제약조건을 알려줍니다. 그리고 각각의 child(자식 위젯)에게 원하는 사이즈를 물어봅니다. 그다음 children들을 차례차례 배치시킵니다.
  • Parent sets position : 마지막으로 constraints를 받아온 부모 위젯에게 본인의 사이즈를 알려줍니다. 

 

 

 

2. Limitations

물론 위의 규칙에도 제한 사항들이 있습니다.

  • 위젯은 부모에게 받은 제약 조건 내에서만 자신의 사이즈를 결정할 수 있습니다. 이는 위젯 본인은 원하는 사이즈를 가질 수 없다는 것입니다. 결정하는 것은 부모 위젯입니다. 우리가 Column이나 Row를 위젯을 사용할 때 alignmet 특성으로 자식 위젯들을 배치시키는 것을 생각해 보면 좋습니다. 
  • 부모 위젯의 사이즈와 위치 또한 부모 위젯의 부모 위젯에 의존합니다. 때문에 전체 위젯 트리를 고려하지 않고, 특정 위젯의 사이즈와 위치를 정확하게 정의하는 것은 불가능합니다. 
  • 자식 위젯이 부모와 다른 크기를 원하지만 부모가 이를 정렬할 정보가 충분하지 않은 경우 자식의 크기는 무시될 수 있습니다. 때문에 정렬 방식은 구체적이어야 합니다.

 

 


3. Tight vs loose constraints

제약의 종류를 두 가지로 구분한다면 tight constraints와 loose constraints가 있습니다.

앞선 설명에서 제약조건은 min/max width, min/max height 4가지가 있다고 얘기했었습니다. tight는 min과 max값이 같은 것을 의미합니다. 

tight width => minimun width = maximum width
tight height => minimum height = maximum height

그래서 정확한 사이즈를 강제할 수 있습니다.

 

반면 loose는 min과 max가 다른 것을 의미합니다. 최소와 최대값을 다르게 입력함으로써 위젯의 사이즈를 범위로 설정할 수 있습니다. 

 

 

 

 

 

Flutter의 constraints와 layout에 대해 더 많은 정보를 알고 싶다면 공식 문서를 참고해 보시기 바랍니다.

https://docs.flutter.dev/development/ui/layout/constraints

 

'Flutter > Flutter document' 카테고리의 다른 글

[Flutter] null safety에 대하여  (0) 2023.03.24