Coaspe

Flutter - InheritedWidget 본문

Flutter/API

Flutter - InheritedWidget

Coaspe 2023. 2. 17. 13:58

트리에서 자식들에게 효율적으로 정보를 전달할 수 있게 해주는 위젯입니다.

build context에서 inherited widget의 특정 타입의 가장 가까운 인스턴스를 얻고 싶다면, BuildContext.dependOnInheritedWidgetOfExactType를 사용하세요.

Inherited widgets이 이런식으로 참조 될 때, 해당 위젯의 상태가 바뀌면 그것을 참조하는 consumer들은 rebuild 해아합니다.

 

다음은 FrogColor라는 inherited widget의 뼈대입니다.

 

Implementing the of method

관습적으로 InheritedWidgetBuildContext.dependOnInheritedWidgetOfExactType을 호출하는 static 메소드를 제공합니다. 이 메소드는 해당 타입의 위젯이 스코프 안에 없을 때, fallback 로직을 정의할 수 있게 해줍니다. 위의 코드를 예로, 이 경우 반환된 값은 null이지만 기본값으로 설정될 수도 있습니다.

 

때때로, of 메소드는 inherited widget이 아닌 데이터를 반환 합니다. 예를 들면, 위의 예로 FrogColor 위젯이 아닌, Color를 반환할 수 있습니다.

 

경우에 따라, inherited widget은 다른 클래스 구현의 세부사항일 수 있고 그러므로 private 입니다. of 메소드는 그런 경우에 public class에 적용됩니다. 예를 들면, Theme은 private inherited widget을 빌드하는 StatelessWidget로 구현됩니다.(StatelessWidget 안에 of 메소드가 있는 구조) Theme.ofBuildContext.dependOnInheritedWidgetOfExactType을 사용하여 inherited widget을 탐색하고, ThemeData를 반환합니다.

 

Calling the of method

of 메소드를 사용할 때, context는 InheritedWidget의 후손이어야합니다. 그리고 이것은 트리 안에서 InheritedWidget 보다 "밑에" 있어야 한다는 뜻입니다.

 

다음 코드에서, context는 FrogColor 위젯의 자식인 Builder에서 사용되므로, 정상 작동합니다.

 

다음 코드에서, context는 FrogColor 위젯의 부모인 MyOtherPage 위젯에서 사용되므로, 정상 작동하지 않습니다.

 

 

See also:

  • StatefulWidget and State, for widgets that can build differently several times over their lifetime.
  • StatelessWidget, for widgets that always build the same way given a particular configuration and ambient state.
  • Widget, for an overview of widgets in general.
  • InheritedNotifier, an inherited widget whose value can be a Listenable, and which will notify dependents whenever the value sends notifications.
  • InheritedModel, an inherited widget that allows clients to subscribe to changes for subparts of the value.

상속 구조

 

  • InheritedWidget

생성자

InheritedWidget({Key? key, required Widget child})

추상 const 생성자.

 

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

Flutter - Tween<T extends Object?>  (0) 2023.02.17
Flutter - RestorationMixin<S extends StatefulWidget>  (0) 2023.02.17
Flutter - StatefulWidget  (0) 2023.02.17
Flutter - Object  (0) 2023.02.17
Flutter - DiagnosticsNode  (0) 2023.02.17
Comments