티스토리 뷰
ChangeNotifier를 듣고 하위 요소에 노출시키며, ChangeNotifier.notifyListeners가 호출될 때마다 종속 요소를 다시 빌드합니다.
ChangeNotifier를 생성할지 재사용할지에 따라 다른 생성자를 사용해야 합니다.
ChangeNotifier 생성하기
값을 생성하려면 기본 생성자를 사용하세요. ChangeNotifierProvider.value를 사용하여 빌드 내에서 인스턴스를 생성하면 메모리 누수 및 잠재적인 부작용이 발생할 수 있습니다.
[O] 반드시 create 내에서 새 ChangeNotifier를 생성하세요.
ChangeNotifierProvider(
create: (_) => new MyChangeNotifier(),
child: ...
)
[X] .value를 사용하여 ChangeNotifier를 생성하지 마세요. 메모리 누수가 발생할 수 있고, 값이 계속 초기화되는 문제가 발생할 수 있습니다.
ChangeNotifierProvider.value(
value: new MyChangeNotifier(),
child: ...
)
[X] 시간이 지남에 따라 변경될 수 있는 변수에서 ChangeNotifier를 생성하지 마세요. 이런 상황에서는 값이 변경될 때 ChangeNotifier가 절대 업데이트되지 않습니다.
int count;
ChangeNotifierProvider(
create: (_) => new MyChangeNotifier(count),
child: ...
)
[O] ChangeNotifier 변수를 전달하려면 ChangeNotifierProxyProvider를 사용하는 것을 고려하세요.
int count;
ProxyProvider0(
update: (_, __) => MyModel(count),
child: ...
)
기존의 ChangeNotifier 인스턴스 재사용하기
이미 ChangeNotifier 인스턴스가 있고 이를 노출하려는 경우 기본 생성자 대신 ChangeNotifierProvider.value를 사용해야 합니다.
그렇지 않으면 ChangeNotifier가 사용 중일 때 폐기될 수 있습니다.
[O] 기존의 ChangeNotifier를 제공하기 위해 ChangeNotifierProvider.value를 사용하세요.
MyChangeNotifier variable;
ChangeNotifierProvider.value(
value: variable,
child: ...
)
[X] 기본 생성자를 사용하여 기존 ChangeNotifier를 재사용하지 마세요.
MyChangeNotifier variable;
ChangeNotifierProvider(
create: (_) => variable,
child: ...
)
참고
- ChangeNotifier는 ChangeNotifierProvider가 청취하는 객체입니다.
- ChangeNotifierProxyProvider는 다른 제공자의 변수로 ChangeNotifier를 생성하고 제공하기 위해 사용됩니다.
- ListenableProvider는 ChangeNotifierProvider와 유사하지만 모든 Listenable 객체와 함께 작동합니다.
생성자
- ChangeNotifierProvider({Key? key, required Create create, bool? lazy, TransitionBuilder? builder, Widget? child})
- create를 사용하여 ChangeNotifier를 생성하고 ChangeNotifierProvider가 위젯 트리에서 제거될 때 자동으로 폐기합니다.
- ChangeNotifierProvider.value({Key? key, required T value, TransitionBuilder? builder, Widget? child})
- 기존 ChangeNotifier를 제공합니다.
속성
- builder → TransitionBuilder?
- 생성된 제공자를 읽을 수 있는 BuildContext를 얻기 위한 문법 설탕.
- final, 상속됨
- hashCode → int
- 이 객체의 해시 코드.
- setter 없음, 상속됨
- key → Key?
- 트리에서 한 위젯이 다른 위젯을 대체하는 방식을 제어합니다.
- final, 상속됨
- runtimeType → Type
- 객체의 런타임 유형에 대한 표현.
- setter 없음, 상속됨
메서드
- build(BuildContext context) → Widget
- 이 위젯이 나타내는 사용자 인터페이스의 부분을 설명합니다.
- 상속됨
- buildWithChild(BuildContext context, Widget? child) → Widget
- 추가 자식 매개변수를 받는 build 메서드.
- 상속됨
- createElement() → _InheritedProviderElement
- 이 위젯의 위치를 관리하기 위해 StatelessElement를 생성합니다.
- 상속됨
- debugDescribeChildren() → List
- 이 노드의 자식을 설명하는 DiagnosticsNode 객체 목록을 반환합니다.
- 상속됨
- debugFillProperties(DiagnosticPropertiesBuilder properties) → void
- 노드와 관련된 추가 속성을 추가합니다.
- 상속됨
- noSuchMethod(Invocation invocation) → dynamic
- 존재하지 않는 메서드 또는 속성에 액세스할 때 호출됩니다.
- 상속됨
- toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode
- 디버깅 도구와 DiagnosticsNode.toStringDeep에서 사용되는 객체의 디버그 표현을 반환합니다.
- 상속됨
- toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) → String
- 이 객체의 문자열 표현.
- 상속됨
- toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String
- 이 노드와 그 하위 노드의 문자열 표현을 반환합니다.
- 상속됨
- toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String
- 객체의 한 줄로 된 상세 설명을 반환합니다.
- 상속됨
- toStringShort() → String
- 이 위젯의 짧은 텍스트 설명.
- 상속됨
연산자
- operator ==(Object other) → bool
- 동등 연산자.
- 상속됨
'Flutter > 상태 관리' 카테고리의 다른 글
플러터] Provider - Consumer 클래스 (0) | 2024.07.01 |
---|---|
플러터] Provider - ChangeNotifierProxyProvider 클래스 (0) | 2024.07.01 |
플러터] Provider에 등록된 상태에 접근하는 방법들 (0) | 2023.07.13 |
플러터] ChangeNotifierProvider와 Selector, Navigator 예제 코드 (0) | 2023.07.12 |
플러터] Provider의 Selector (0) | 2023.07.12 |