[Flutter] 상태관리 1

솜사탕·2024년 6월 21일
0

flutter

목록 보기
1/15
post-thumbnail

상태관리

  • 상태(State): UI에 변화를 주는 데이터, 데이터를 관리하기 위해 만들어진 State class

UI에 반영되는 대표 위젯 2가지가 있습니다.

StatelessWidget

  • 상태가 없는 위젯(UI가 변하지 않는 데이터로 구성하며 예로는 텍스트, 아이콘 등 단순한 UI요소)
class MyStatelessWidget extends StatelessWidget{
 
 Widget build(BuildContext context) {
 	return Text('Hello, World');
    }
 }

StatefulWidget

  • 상태를 가지는 위젯입니다.
  • 위젯의 수명 동안 변경될 수 있으며, 상태가 변경될 때마다 UI가 다시 빌드
class MyStatefullWidget extemds StatefullWidget{
 
 _MyStatefullWidgetState createState() => _MyStatefullWidgetState();
}

class _MyStatefullWidgetState extends State<MyStatefullWidget> {
	int _counter = 0;

	void _incrementCounter() {
     setState(() {
     	_counter++;
     });
}


Widget build(BuildContext context){
	return Column(
    	children:[
        	Text('Counter: $_counter'),
            ElevatedButton(
            	onPressed: _incrementCounter,
                child: Text('Increment'),
            ),
        ],
        );
 }}

위젯의 수명주기

  1. createState()
    새로운 Stateful 위젯이 생성될 때 호출되며, 연결된 State의 인스턴스를 반환

  2. initState()
    위젯이 생성되며 처음으로 호출되는 메[]소드, 한번만 호출되고 내부적으로 super.initeState()를 꼭 호출해야함

  3. didChangeDependencies()
    initState() 다음에 호출되는 함수로, 상속된 위젯 또는 inheritedWidget을 상속하고 있을때 해당 값이 변경되는 경우 호출됨

  4. build()
    화면에 위젯들을 빌드할때 호출됨

  5. setStete()
    위젯 내부의 데이터가 변경되었으니 화면을 재 렌더링하기 위해서 호출됨

  6. dispose()
    State() 객체가 영구 제거됨

단점..?

setState()를 호출할 시 build()를 호출하는데, 트리에 있는 모든 위젯이 다시 빌드가 됨
트리가 깊어지고 많아질수록 앱의 성능저하로 이루어짐 -> 효율적인 관리를 하기 위해서 상태 관리 패턴을 사용함

0개의 댓글