파파비의 블로그

플러터, flutter) ChangeNotifierProxyProvider (다른 ChangeNotifier에 종속적인 Provider 만들기) 본문

개발/flutter

플러터, flutter) ChangeNotifierProxyProvider (다른 ChangeNotifier에 종속적인 Provider 만들기)

N. Dave 2020. 6. 19. 12:56
반응형

여기 데이터베이스 규칙을 보면, 읽고 쓰기 모두 auth가 필요하게끔 설정해두었다.

그래서 이전 글처럼 단순히 로그인만해서는 DB에서 데이터를 가져올 수 없다.

 

이런 식으로, 발행받은 토큰을 url에 넣어주어야 한다. auth가 null이 되지 않게끔 말이다.

참고로 이런 api는 전부 '서버'별로 다르다는 것을 다시 한번 인식하고 가자!

 

저렇게 곧장 화면이 켜질 때, 인증받은 토큰이 필요한데, data를 가져올 수 있을까?

일단 이렇게 생성자에 넣었다.

 

그런데 이들은 앱 어디 부분에서 생성되는가?

바로 맨처음 provider로 생성이된다.

Auth와 Provider 모두다 말이다.

 

우리는 Auth가 먼저 실행된 후 Provider가 Auth에서 데이터를 가져와서 build가 이루어져야 한다.

이렇게 종속적일때는,

ChangeNotifierProvider를 쓰는게 아니라,

ChangeNotifierProxyProvider를 쓴다.

 

ChangeNotifierProxyProvider는 재네럴 형식이라  <> 안에 2개의 타입이 들어간다,

첫번째 타입은 종속하는, 데이터를 얻으려는 타입이고,

두번째 타입은 본인이 공유하려는 타입이다.

 

ChangeNotifierProxyProvider은 2개의 인수를 가진다.

create와 update이다. 만들때는 

create은 맨처음 만들때라서, 그때는 종속적인 데이터가 없을 수도 있으므로 그런 처리를 해준다

update는 종속적인 데이터가 변경되거나 했을 경우 같이 rebuild하게 되는데 이때 어떻게 rebuild할지 표시하는 것이다.

 

특히 중요한 부분이있는데,

create와 다르게 인수가 3개가 들어간다.

context, 얻으려는 provider data , 본인의 이전 provider data

 

새로 만드는데, 이전의 데이터들이 날라가버리면 안되니까 본인의 이전 data도 함께 제공된다.

여기서는 produsts item list를 전달하는 모습을 볼 수 있다.

 

위 코드를 보면 맨처음에는 data가 없이 만들어지지만, auth가 실행되어 data가 업데이트되면

곧장 ChangeNotifierProxyProvider의 update도 실행되어 나머지 참고하는 위젯들도 rebuild된다.

 

마지막 알아두어야 할 부분은

ChangeNotifierProxyProvider는 순서가 중요하다. ChangeNotifierProxyProvider는 위젯트리를 확인해서

본인이 참고하려는 data가 있는지 찾게되는데, 그래서 참고하려는 Provider보다 나중에 나오도록 코딩을 해두어야 한다.

여기서도 auth provider 다음 줄에 ChangeNotifierProxyProvider가 되어 있는 것을 볼 수 있다.

 

ChangeNotifierProxyProvider는 6개까지 가능하다. ChangeNotifierProxyProvider1,2,3,4 ... 이렇게 위젯들이 있어서

이름이 같은 위젯들을 같이 쓰면 안되는 것으로 알고 있다.

반응형
Comments