[Flutter] 플러터 Provider 시나리오(상태관리)
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는 Context를 자동으로 제공해주기에 필요없다.
- Provider.of는 데이터를 가져오기 위해서 Context가 필요하다.

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