[Flutter] 플러터 Provider 시나리오(상태관리)

오늘도 알고보자·2022년 2월 22일
0

Provider

시나리오보드

  • STF 위젯은 상태를 가지고 해당상태의 변화에 따라서 표시되는 UI를 변경한다.
  • 서로다른 위젯에서 동일한 상태와 데이터가 필요한 경우에 불필요한 위젯들이 re_build되면서 성능저하를 가져올수있다.
  • provider는 이렇게 동일한 상태와 데이터를 전역적으로 다른 위젯들과 공유하기 위해서 사용한다.
  • bloc에서 비즈니스 로직과 UI로직을 나누는 것과 비슷하다.

  • provider는 크게 생성부분과 provider 소비부분 consumer로 나뉜다.
    • 생성부분에서는 사용할 데이터 타입을 정하고, 해당 데이터에 대한 provider를 만든다.
    • 소비부분에서는 provider를 통해 데이터를 불러오거나 수정의 대한 작업을 한다.

Provider 클래스 만들기

  • Provider를 사용하기 위해선 ChangeNotifier 클래스를 만들어준다.
  • 공유할 상태 변수를 만들어 준다.
  • 그리고 해당변수를 공유할수있게 getter 만들어준다.

ChangeNotifier

  • 일반적인 UI에서는 setState를 해야 페이지를 다시 그린다.
  • Provider에서는 ChangeNotifier를 사용하여 같은 일을 수행한다.
  • ChangeNotifier를 with한 클래스는 notifyListener() 함수를 호출할 수 있다.
  • 변수가 수정되었으면 notifyListener()를 실행하여 데이터가 갱신되었음을 알려야한다.
    • notifyListener()를 실행하지 않으면 해당값이 변경되었는지 인식하지못하게된다.
    • notifyListener() 가 함수가 작동한다고 ChangeNotiferProvider에 알려주게 된다.

ChangeNotifierProvider

  • ChangeNotifierProvider 는 child에게 ChangeNotifier 인스턴스를 제공한다.
  • 여러 클래스를 제공하기 위해서는 MultiProvider를 사용한다.
  • ChageNotifierProvider<클래스명>(create: (_) => 클래스명()) 형태

Provider consumer

  • Provider를 소비한다는 것은 데이터의 값을 변경하거나 화면에 보여주는 것을 의미한다.

(https://s3-us-west-

  • consumer를 사용해서 앱상태에 접근해줄수있다.
  • 데이터를 소비하는 방법은 2가지이다.
    • Consumer 사용
    • Provider.of
  • Consumer는 Context를 자동으로 제공해주기에 필요없다.
  • Provider.of는 데이터를 가져오기 위해서 Context가 필요하다.

  • consumer에 액세스 하려는 모델의 타입을 제네릭으으로 지정해준다 현 예제에서는 Counter를 이다.
  • builder는 ChangeNotifier가 변경될때마다 호출되는 함수입니다.
  • 즉 Counter에서 notifyListeners() 가 호출되면 모든 Consumer의 builder 메소드가 호출된다.

  • 이렇게 변수로 선언해서 사용할수도있다.

0개의 댓글