티스토리 뷰

반응형

변경 사항이 없으면 리빌드를 방지하고 제한된 값만 선택하여 업데이트를 필터링할 수 있습니다.

 

Selector는 Provider.of를 사용하여 값을 얻은 다음 해당 값을 selector에 전달합니다. 그 후 selector 콜백은 빌더를 완료하는 데 필요한 정보만 포함하는 객체를 반환하는 작업을 수행합니다.

 

기본적으로 Selector는 collection 패키지의 DeepCollectionEquality를 사용하여 selector의 이전 결과와 새로운 결과를 비교하여 builder가 다시 호출되어야 하는지 결정합니다. 이 동작은 커스텀 shouldRebuild 콜백을 전달하여 재정의할 수 있습니다.

 

selector가 리턴하는 값은 불변이어야 하며, 그렇지 않으면 Selector는 변경 사항이 없다고 생각하여 builder를 다시 호출하지 않을 수 있습니다. 따라서 selector는 컬렉션(List/Map/Set/Iterable) 또는 ==를 재정의한 클래스를 반환해야 합니다.

 

다음 예제에서는 foo.bar가 변경될 때만 builder가 호출됩니다.

Selector<Foo, Bar>(
  selector: (_, foo) => foo.bar,  // `bar`가 변경될 때만 리빌드됨
  builder: (_, data, __) {
    return Text('${data.item}');
  }
)

 

 

다음 예제에서는 Records를 사용해서 foo.item1 또는 foo.item2가 변경될 때만 builder가 다시 호출됩니다. ==를 구현한 클래스를 작성하지 않고 여러 값을 선택하기 위해 가장 쉬운 해결책은 Dart 버전 3.0부터 사용할 수 있는 "Records"를 사용하는 것입니다.

Selector<Foo, ({String item1, String item2})>(
  selector: (_, foo) => (item1: foo.item1, item2: foo.item2),
  builder: (_, data, __) {
    return Text('${data.item1}  ${data.item2}');
  },
);

 

 

 

생성자

  • Selector({Key? key, required ValueWidgetBuilder builder, required S Function(BuildContext, A) selector, ShouldRebuild? shouldRebuild, Widget? child}) : 변경되지 않는 경우 리빌드를 방지하고 제한된 값만 선택하여 업데이트를 필터링할 수 있는 Consumer의 동등물입니다.

 

 

 

속성

  • builder: child와 selector의 마지막 결과를 사용하여 위젯 트리를 빌드하는 함수입니다.
  • hashCode: 이 객체의 해시 코드입니다.
  • key: 트리에서 한 위젯이 다른 위젯을 대체하는 방법을 제어합니다.
  • runtimeType: 객체의 런타임 타입을 나타냅니다.
  • selector: 일부 InheritedWidget을 얻고 해당 내용을 제한된 수의 속성만 포함하는 새 객체로 매핑하는 함수입니다.

 

 

 

메서드

  • createElement(): 이 위젯의 위치를 트리에서 관리할 StatefulElement를 생성합니다.
  • createState(): 트리의 특정 위치에서 이 위젯을 위한 변경 가능한 상태를 생성합니다.
  • debugDescribeChildren(): 이 노드의 자식들을 설명하는 DiagnosticsNode 객체 리스트를 반환합니다.
  • debugFillProperties(DiagnosticPropertiesBuilder properties): 노드와 관련된 추가 속성을 추가합니다.
  • noSuchMethod(Invocation invocation): 존재하지 않는 메서드나 속성에 접근할 때 호출됩니다.
  • toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}): 디버깅 도구와 DiagnosticsNode.toStringDeep에서 사용되는 객체의 디버그 표현을 반환합니다.
  • toString({DiagnosticLevel minLevel = DiagnosticLevel.info}): 이 객체의 문자열 표현을 반환합니다.
  • toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug}): 이 노드와 그 자손의 문자열 표현을 반환합니다.
  • toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}): 객체의 한 줄로 된 상세 설명을 반환합니다.
  • toStringShort(): 이 위젯의 짧은 텍스트 설명을 반환합니다.

 

 

 

연산자

  • operator ==(Object other): 동등 연산자입니다.
반응형
댓글
공지사항