Flutter addListener

이건선·2023년 7월 15일
0

Flutter

목록 보기
12/30

addListener

리스너를 통해 변경된 상태를 알릴 수 있는 기능을 제공합니다.

아래 예제의 appProv.addListener(appListener) 코드에서 addListener는 appProv 객체의 상태가 변화될 때마다 appListener 함수를 실행하라는 의미입니다. 즉, appProv의 상태가 변하면 그에 따라 알림을 받아 appListener 함수를 실행하여 이에 따른 동작을 수행하게 됩니다.

이런 식으로, 상태 관리를 위해 ChangeNotifier와 addListener를 이용하여 상태의 변화를 감지하고 그에 따른 처리를 수행할 수 있습니다.

예제

...

  late final AppProvider appProv;

  
  void initState() {
    // TODO: implement initState
    super.initState();
    appProv = context.read<AppProvider>();
    appProv.addListener(appListener);
  }

  void appListener() {
    if (appProv.state == AppState.success) {
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => SuccessPage()));
    } else if (appProv.state == AppState.error) {
      showDialog(
          context: context,
          builder: (context) {
            return AlertDialog(
              content: Text('Something went wrong'),
            );
          });
    }
  }

  
  void dispose() {
    appProv.removeListener(appListener);
    super.dispose();
  }

...

initState()
이 함수는 StatefulWidget이 생성될 때 한 번만 호출되는 함수입니다. 이곳에서는 AppProvider 객체를 얻어와서 appProv 변수에 할당하고, 상태 변경을 감지하기 위한 리스너를 추가하는 작업을 합니다.

appListener()
이 함수는 AppProvider의 상태가 변경될 때마다 호출되는 콜백 함수입니다. AppState가 success일 경우, SuccessPage로 화면을 전환하며, error일 경우 "Something went wrong"라는 메시지를 담은 대화상자를 표시합니다.

dispose()
이 함수는 위젯이 메모리에서 제거될 때 호출됩니다. 이곳에서는 initState()에서 추가했던 리스너를 제거하는 작업을 수행합니다. 메모리 누수를 방지할 수 있습니다.

profile
멋지게 기록하자

0개의 댓글