2021. 8. 15. 21:52ㆍFlutter 2 Mobile App/Flutter 2 입문
Stateful 위젯과 Stateless 위젯의 차이
화면이 그려진 후 사용자와 상호작용을 통해 위젯을 다시 그려야하는 경우 Stateful 위젯을 사용해야 한다.
상태를 가지는 위젯은 final 변수가 아닌 변경가능한 일반적인 변수를 가질 수 있다.
Stateless 위젯은 상태가 없기때문에 화면이 동적으로 다시 그려지지 않는다.
따라서 final 변수를 선언하는 것이 좋다.
만약, Stateless 위젯인데 일반 변수를 사용한다면...?
경고 메세지가 뜬다.
어차피 다시 그릴 일도 없는 일반 변수가 아닌 변경 불가능한(@immutable) 변수를 사용하는게 좋다고..
그림 그리기 : build
stateful 위젯에서는 setState() 를 통해 build() 함수가 재실행되는데,
상태 변경이 일어날 때 setState() 를 통해 변경된 상태로 그림을 다시 그린다.
Stateful 위젯의 단점
변경된 한개의 위젯을 다시 그리기 위해 모든 위젯이 다시 그려지는 일이 발생
부모가 다시 그려지면 그 이하의 모든 자식들이 다시 그려지게 되기 때문이다.
해결책으로 BuildContext 분리하기 가 있다.
BuildContext (전후상황 빌딩) 분리
플러터는 그림 그릴 때 어떤 위젯을 다시 그릴지 참조하기 위해 BuildContext를 갖고 있다.
전후상황(현재 최신상황) 흐름을 알고 있는 클래스가 BuildContext 이다.
즉, 어느 위젯부터 그림을 다시 그려야 하는지 알고 있다.
위젯트리에서 build() 함수가 실행되는 시점을 변경하면 특정 위젯만 다시 그릴 수 있다.
build() 함수가 실행되는 시점을 변경하기 위해서는
새 위젯을 생성해야 하고
새로운 위젯을 생성하면 새로운 BuildContext가 생성되게 된다.
build() 가 실행되는 시점을 변경하려면
새 위젯을 생성해야하고
새 위젯을 생성하면
새 BuildContext가 생성된다.
1. 우선 기존위젯을 Stateless 위젯으로 변경한다.
- Stateless 용 빌드 컨텍스트 : build(BuildContext context)
2. 상태관리가 필요한 위젯을 새 위젯으로 변경하여 BuildContext를 분리한다.
- Stateful 용 빌드 컨텍스트 : build(BuildContext context)
3. 분리하는 순간 상태관리가 필요한 영역만 다시 그릴 수 있다.
Stack 위젯
여러 위젯을 겹쳐 사용할 때 사용
Positioned 위젯은 여러 위젯이 겹쳐 있을 때
하위 위젯의 위치를 제어해야하는 경우에 사용한다.
즉, Positioned 위젯은 Stack과 같이 사용된다.
'Flutter 2 Mobile App > Flutter 2 입문' 카테고리의 다른 글
[플러터 2] UI 구조 6 (0) | 2021.08.15 |
---|---|
[플러터 2] UI 구조 4 (0) | 2021.08.14 |
[플러터 2] UI 구조 3 (0) | 2021.08.14 |
[플러터 2] UI 구조 2 (0) | 2021.08.14 |
[플러터 2] UI 구조 1 (0) | 2021.08.14 |