플러터 ValueNotifier

쓰리원·2023년 4월 30일
0
post-thumbnail

1. ValueNotifier 란?

위의 공식문서 캡쳐를 바탕으로 같이 살펴보겠습니다. 글의 맨 아래에 공식문서 링크가 있습니다.

A ChangeNotifier that holds a single value.

When value is replaced with something that is not equal to the old value as evaluated by the equality operator ==, this class notifies its listeners.

1. ChangeNotifier 상속: ValueNotifier는 ChangeNotifier를 상속받는 Flutter 클래스입니다. ChangeNotifier는 리스너 패턴을 구현하여 상태 변경을 알릴 수 있는 기능을 제공합니다.

2. 단일 값 특화: ValueNotifier의 주요 특징은 단일 값(single value)에 대한 변화를 관리하는 것입니다. 이 클래스는 내부적으로 하나의 데이터 값을 저장하고, 이 값이 변경될 때마다 리스너들에게 알림을 보냅니다.

3. 변경 감지 및 알림: ValueNotifier는 저장된 값이 변경될 때 (old.value가 new.value와 다를 때) 자동으로 리스너들에게 알림을 보냅니다. 이는 == 연산자를 사용하여 값의 변경을 감지합니다.

글로만 적어놓으면 잘 이해가 안가니 위의 각각의 내용에 대해서 세부적으로 아래에 내용에서 다뤄보겠습니다.

2. ValueNotifier의 기능

1. 단일 값 보유: ValueNotifier는 제네릭 타입 T의 단일 값을 보유합니다. 이는 어떤 종류의 데이터든 될 수 있습니다 (예: int, String, List, 등).

2. 리스너 알림: value 속성을 새로운 값으로 설정할 때마다, 이전 값과 새 값이 == 연산자로 비교되어 다를 경우, ValueNotifier는 모든 리스너(listener)에게 알림을 보냅니다.

3. ValueNotifier의 제한사항

1. 변경 통지의 제한: ValueNotifier는 값의 정체성(identity)이 변경될 때만 리스너에게 알림을 보냅니다. 즉, 단순히 값 내부의 상태가 변경되었을 뿐 값 자체의 정체성이 변경되지 않았다면, 리스너는 알림을 받지 못합니다.

2. 뮤터블 상태의 변경 미통지: 예를 들어, ValueNotifier<List>의 경우, 리스트 내부의 내용이 변경되어도 리스트의 정체성 자체는 변하지 않았기 때문에 리스너들에게 변경사항이 통지되지 않습니다.

3. 불변 데이터 타입에 적합: 이러한 제한 때문에 ValueNotifier는 불변 데이터 타입(immutable data types)과 함께 사용하는 것이 가장 좋습니다. 불변 데이터 타입은 일단 생성된 후에는 내부 상태가 변경되지 않는 데이터 타입을 말합니다.

4. 변경 가능한 데이터 타입에 대한 대안: 변경 가능한(mutable) 데이터 타입을 사용해야 하는 경우, ChangeNotifier를 직접 확장하여 사용하는 것을 고려해야 합니다. ChangeNotifier를 확장하면, 데이터 내부의 변경사항에 대해 더 세밀하게 알림을 보낼 수 있는 방법을 제공합니다.

x. reference

https://api.flutter.dev/flutter/foundation/ValueNotifier-class.html

profile
가장 아름다운 정답은 서로의 협업안에 있다.

0개의 댓글