이번에는 setState()메서드에 대해 알아볼게요.
앞에서 우리가 탭할때마다 1씩 증가하는 값을 화면에 띄우는 앱을 만들었는데
실제 값은 1씩 늘어나지만 화면에는 여전히 0만 나왔습니다.
플러터는 상태의 변경을 화면에 보여주려면 위젯들을 다시 띄워야합니다.
즉 build()메서드가 다시 실행되면서 위젯을 다시 그려야합니다.
이것을 가능하게 해주는 메서드가 setState메서드입니다.
그래서 counter++ 이 부분을 setState()메서드안에서 실행을하면 build()메서드를 재 실행하면서 새로운 프로퍼티의 값을 화면에 보여줍니다.
counter++코드를 다음과 같이 setState()메서드에 감쌉니다.
onPressed: (){
    counter++;
    print(counter);
},
onPressed: (){
    setState(() {
        counter++;
    });
    print(counter);
},
그리고 _MyAppState에 있는 build에 다음의 출력문도 추가해 정말 build()메서드가 재작동하는지 확인하겠습니다.
print('rebuild');
현재까지의 _MyAppState 클래스의 전체 코드는 다음과 같습니다.
class _MyAppState extends State<MyAppState> {
  int counter = 0;
  @override
  Widget build(BuildContext context) {
    print('rebuild');
    return Scaffold(
      appBar: AppBar(
        title: Text('everdevel'),
        centerTitle: true,
        leading: Icon(Icons.menu),
        actions: [
          Icon(Icons.search),
          Icon(Icons.attach_file),
        ],
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: (){
          setState(() {
            counter++;
          });
          print(counter);
        },
        icon: Icon(Icons.add),
        backgroundColor: Colors.red,
        label: Text('push'),
      ),
      body: Center(
        child:Text(
          '$counter',
          style: TextStyle(fontSize: 100),
        ),
      ),
    );
  }
}
실행을 하면 다음과 같이 누른 수 만큼 1씩 올라간 화면이 나타납니다.
그리고 빨간색 박스를 보면 올라간 값과 함께 rebuild가 출력됨을 알 수 있습니다.
counter++가 작동 하고 build()메서드가 재 호출되어 1 올라간 값이 화면에 나타납니다.
와우! 사실 여기까지 한 것은 우리가 플러터 프로젝트를 새로 만들면 나오는 기본앱을 만든것입니다.
플러터 앱을 새로 만들고 앱을 실행해보면 완벽하게 똑같진 않지만 거의 흡사함을 알 수 있습니다.
코드도 완벽하게 같진 않지만 거의 흡사합니다.
우리는 이제 완벽하진 않더라도 대충 기본앱이 어떻게 돌아가는지는 알게되었네요. 호호!!
그럼 다음 컨텐츠 뭘 만든지 구상하고 있겠습니다.
봐주셔서 감사합니다. 문의 또는 잘못된 설명은 아래의 댓글에 부탁드립니다. 
 당신의 작은 누름이 저에게는 큰 희망이 됩니다.
댓글 0개
정렬기준