티스토리 뷰
반응형
변경 사항이 없으면 리빌드를 방지하고 제한된 값만 선택하여 업데이트를 필터링할 수 있습니다.
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): 동등 연산자입니다.
반응형
'Flutter > 상태 관리' 카테고리의 다른 글
플러터] 상태 관리 (State management) (0) | 2024.07.02 |
---|---|
플러터] Provider 패키지 README.md (0) | 2024.07.02 |
플러터] Provider - Consumer 클래스 (0) | 2024.07.01 |
플러터] Provider - ChangeNotifierProxyProvider 클래스 (0) | 2024.07.01 |
플러터] Provider - ChangeNotifierProvider 클래스 (0) | 2024.07.01 |
댓글
공지사항