Coaspe

Flutter - BuildContext 본문

Flutter/API

Flutter - BuildContext

Coaspe 2023. 2. 17. 13:58

위젯 트리안에서 위젯의 위치를 처리합니다.

 

BuildContext는 StatelessWidget.build 메소드와 State 객체가 가지는 메소드에서 사용 할 수 있는 메소드들의 집합을 가지고 있습니다.

 

BuildContextStatelessWidget.build 같은 WidgetBuilder로 전달되고, State.context 멤버로 접근이 가능합니다. 몇몇 static 함수(e.g. showDialogTheme.of)는 BuildContext들을 가져와서, 주어진 context의 정보를 사용하거나 위젯을 호출하는 것 처럼 사용합니다.

 

각 위젯은 자신의  BuildContext가 있고, BuildContext는 StatelessWidget.build or State.build 함수에 의해 반환되는 위젯들의 부모가 됩니다. (비슷하게, RenderObjectWidgets 자식들의 부모가 된다.)

 

특히, 이것은 build 메소드 안에서, build 메소드의 위젯의 build context는 build 메소드에 의해 반환되는 위젯의 build context와 다르다는 것을 의미합니다. 예를 들어 Theme.of(context)는 주어진 build context에서 가장 가까운 Theme을 탐색합니다. 만약 위젯 Q의 build 메소드가 자신의 반환된 위젯 트리의 Theme 정보를 포함하고, 자신의 context를 Theme.of에 넘기려고 시도한다면, Q의 build 메소드는 해당 Theme 객체를 찾지 못합니다. 대신, 조상이 위젯 Q에게 전해주는 Theme을 찾으려 할 것입니다. 만약 반환된 트리의 서브파트의 build context가 필요하다면, Builder 위젯을 사용하면 됩니다. Builder.builder 콜백으로 전해지는 build context는 Builder의 build context 입니다.

 

예를 들면, 다음 코드에서, ScaffoldState.showBottomSheet 메소드는 build 메소드가 생성하는 Scaffold  위젯에서 호출됩니다. 만약 Builder를 사용하지 않고, build 메소드의 context 인자를 사용한다면, 어떠한 Scaffold 도 찾지 못하고 Scaffold.of 함수는 null을 반환합니다.

 

특정 위젯의 BuildContext는 트리 안에서 움직일 때 위치를 변화시킬수 있습니다. 따라서, 이 클래스의 메소드에서 반환된 값은 단일 동기함수 실행 이후에 캐시되지 않아야 합니다.

 

BuildContext 객체들은 사실 Element 객체 입니다. BuildContext 인터페이스는 Element 객체를 직접적으로 조작하지 못하게 하기 위해 사용됩니다.

 

Implementers

Element

 

생성자

BuildContext()

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

Flutter - Object  (0) 2023.02.17
Flutter - DiagnosticsNode  (0) 2023.02.17
Flutter - RenderObjectWidget  (0) 2023.02.17
Flutter - Element  (0) 2023.02.17
Flutter - Widget  (0) 2023.02.17
Comments