본문 바로가기
Application/Flutter

[Flutter] Provider

by 비나래 2022. 8. 3.

<Provider는 무엇인가, 관련 class>

전역 상태 관리 및 위젯들간에 상태를 공유하는 방법

A wrapper around the InheritedWidget that makes it easier to use and manage.

State management technique를 제공함 (Managing a piece of data around the app)

https://www.geeksforgeeks.org/flutter-provider-package/

 

<Provider가 필요한 이유 설명>

Flutter에는 2가지 위젯이 있음 (Stateful / Stateless)

Stateful은 State를 가지고 있는 widget임, 만약 State가 바뀌면 화면에 표시되는 UI를 변경함

만약 다른 Widget에서도 해당 State가 필요하다면 어떻게 되는가?

 

가능한 방법은 아래의 2가지

방법 (1) 상태를 공유하는 두 위젯의 부모 위젯을 Stateful Widget으로 만들고, 자식 위젯에 Parameter로 상태 전달

-> 이 경우 불필요한 widget의 re-build가 필요해짐. 이로 인한 성능 이슈.

 

방법 (2) 동일한 상태를 전역적으로 다른 위젯들과 공유하기 위해서 사용함

위젯 트리와 상관 없이 상태를 저장할 클래스를 생성함.

해당 상태를 공유하는 공통 부모 위젯에 Provider를 제공, 상태를 사용하는 곳에서는 Provider의 데이터를 읽어서 사용 (Consumer)

 

변수 수정 후, notifyListeners()를 실행하여, 데이터가 갱신되었음을 통보함.

(Stateful Widget에서 값이 변경되었음을 알리기 위해 setState를 사용하는 것과 동일)

https://dev-yakuza.posstree.com/ko/flutter/provider/

 

<Nullable과 ! 와 ? 의 사용법>

! : 함수의 return값이나 참조형 변수의 지정자가 null이 아님을 확인했으니, non-nullable 변수에 대입하게 해줘

? : Nullable 변수를 만드는 방법

https://debaeloper.tistory.com/59

 

<Super와 key  사이의 관계, TLDR>