[GetX 기능 정리] 2. 단순 상태 관리

mmmYoung·2022년 4월 1일
0

단순 카운팅 앱에서 Provider와 GetX의 상태관리를 비교하여 확인해봅시다.

최상단 파일에 인스턴스 선언

class manager extends statefulWidget{
~
~
@override
Widget build(BuildContext context){
  Get.put(CountGetx()); //어디에나 선언 가능
  return Scaffold(
    body: Column(
      children : [
        WithGetX(),
        ChangeNotifierProvider<CountProvider>(
          create: (_)=>CountProvider(),
          child:WithProvider()
        )
      ]
    )
  );

Provider Controller

CountProvider 클래스

class CountProvider extends ChangeNotifier{
  int count =0;
  void increase(){
    count++;
    notifyListeners();
  }
}

Provider 적용 파일

Class WithProvider extends StatelessWidget {
~
~

@overide
Widget build(BuildContext context){
	return Column(
      children:[
      	Consumer<CountProvider>(
      		builder: (_,snapshot,child),{
      			return Text("${snapshot.count}")
      		}
      	),
        RaisedButton(
        child:Text("+"),
        onPressed: (){ 
        //listen:true는 전체가 빌드 됨 
        	Provider.of<CountProvider(context,listen:false) 
        	.increase();
        	}
        
        )
      ]
    );
}

GetX Controller

CountGetx 클래스

class CountGetx extends GetxController{
  int count =0;
  void increase(){
    count++;
    update();
  }
}

Getx 적용 파일

Class WithGetx extends StatelessWidget {
~
~
//최상단 파일 대신 이곳에 선언도 가능하다.
// CountGetx _controllerWithGetx = Get.put(CountGetx());

@overide
Widget build(BuildContext context){
	return Column(
      children:[
      	GetBuilder<CountGetx>(
      		builder: (controller),{
      			return Text("${controller.count}")
      		}
      	),
        RaisedButton(
        child:Text("+"),
        onPressed: (){ 
        	Get.find<CountGetx>().increase();
            //이곳에 선언하면 find를 할 필요가 없어짐
            //_controllerWithGetx.increase();
        	}
        
        )
      ]
    );
}

정리

프로바이더는 context의 영향을 받기 때문에 버튼을 위젯으로 빼는 경우 stl -> stf 위젯으로 변경하거나 context를 전달해야함.
Getx는 선언이 자유롭고 context의 영향을 받지 않음.
Getx에서의 더 큰 장점은 GetBuilder에 id를 부여하여 하나의 컨트롤러를 다르게 보고 따로 상태 관리를 할수 있다.

출처 https://youtu.be/k3hgQu6it4c

profile
안냐세여

0개의 댓글