티스토리 뷰

Provider를 사용하여 등록된 상태에 접근하는 방법은 다양합니다. 가장 일반적으로 사용되는 방법들에 대해서 알아봅시다.

  1. Provider.of<T>(context)
    • Provider.of<T>(context)를 사용하면 등록된 T 타입의 객체 또는 상태에 접근할 수 있습니다.
    • 이 방법은 가장 간단하고 직접적인 방법이며, 위젯 트리에서 가장 가까운 상위 Provider<T>를 찾습니다.
    • 기본적으로 리스닝 동작이 활성화되어 있으며, ChangeNotifierProvider의 상태 데이터 변경되거나 setState()로 상태 데이터가 변경되면, 해당 위젯이 리빌드 됩니다.
    • 예시: var myData = Provider.of<MyDataProvider>(context);
  2. context.read<T>():
    • context.read<T>()를 사용하여 등록된 T 타입의 객체 또는 상태를 읽을 수 있습니다.
    • 이 방법은 데이터를 읽기만 하고 리스너를 등록하지 않습니다.
    • 예시: var myData = context.read<MyDataProvider>();
  3. Consumer<T> 위젯:
    • Consumer<T> 위젯은 T 타입의 상태에 접근하고 해당 데이터에 대한 리스너를 등록할 수 있습니다.
    • Consumer는 자식 위젯을 빌드하는 콜백을 가지고 있으며, 해당 콜백은 데이터 변경 시에만 호출됩니다.
    • 이 방법은 T 타입의 상태가 변경될 때 builder가 호출되어 하위 위젯을 리빌드 합니다. 그 외에 위젯의 불필요한 리빌드를 방지하여 성능을 높일 수 있습니다.
    • 예시:
      Consumer<MyDataProvider>(
        builder: (context, myData, child) {
          // myData를 사용하여 위젯을 빌드합니다.
          return Text(myData.someValue.toString());
        },
      )
  4. Selector<T, R> 위젯:
    • Selector<T, R> 위젯은 데이터 선택 로직을 제공하여 필요한 데이터만 리스닝할 수 있도록 합니다.
    • R은 선택한 상태의 타입이며, T를 기반으로 리스닝할 데이터를 추출합니다.
    • 예시:
      Selector<MyDataProvider, int>(
        selector: (context, myData) => myData.someValue,
        builder: (context, value, child) {
          // selector에서 선택한 myData.someValue가 변경될 때만 builder가 호출됩니다.
          return Text(value.toString());
        },
      )

위의 방법들은 Provider를 사용하여 등록된 상태에 접근하는 일반적인 방법들입니다. 선택할 때는 상황과 요구사항에 따라 가장 적합한 방법을 선택하면 됩니다.

댓글
공지사항