WillScope deprecated 문제 해결: PopScope

데구르르·2023년 12월 25일
0

Flutter

목록 보기
15/17

WillScope는 현시점 deprecated되어 쓸 수는 있지만 언제 사라질지 모르는 위기에 놓여있다. 플러터에서는 WillScope 대신 PopScope를 사용하는 것을 권장하고 있다. 어떻게 PopScope를 사용해서 WillScope 코드를 수정하는지 알아보았다.

WillPopScope?

플러터에서 Navigator를 사용하여 화면 간의 전환을 관리하면 각각의 화면이 스택에 쌓이고, 이전 화면으로 돌아갈 수 있는 "뒤로 가기" 기능이 자동으로 지원된다. WillPopScope 위젯은 화면을 빠져 나갈 때 뒤로 가기 이벤트를 처리하고, 이벤트를 방지하거나 추가 작업을 수행할 수 있는 기능을 제공한다.

기존 코드

WillPopScope(
  onWillPop: () async {
  	if (await _controller.canGoBack()) {
    	await _controller.goBack();
        return false;
    }
    return true;
  }
)

onWillPop은 WillPopScope 위젯에서 제공하는 콜백 함수로, 사용자가 뒤로 가기 버튼을 눌렀을 때 실행되는 로직을 정의하는 데 사용된다.

PopScope

PopScope에는 canPop, onPopInvoked, child 속성이 주로 쓰인다. onWillPop은 onPopInvoked

  • canPop: 시스템 뒤로가기 기능을 막는데 쓰인다. canPop이 false면 시스템 뒤로가기를 해도 스택에 쌓인 화면이 pop되지 않는다.
  • onPopInvoked: 화면을 pop하려는 시도가 있으면 실행된다. 만약 화면이 pop됬으면 didPop이 true가 되고, 아니면 false가 되어 콜백함수가 실행되지 않는다.

WillPopScope와 동일한 로직으로 코드를 구성하고 싶다면 canPop을 false로 놓으면 된다.

PopScope로 migration한 코드

PopScope(
        canPop: false,
        onPopInvoked: (didPop) async {
          if(await controller.canGoBack()) {
            await controller.goBack();
          } else {
            _showBackDialog();
          }
        },

canPop을 true로 놓았을 때 좋은 점에 대해서는 더 공부가 필요하다. 급하면 canPop을 false로 놓고 하면 기존의 코드를 크게 수정하지 않아도 된다.

더 자세한 사항은 공식문서를 보자.

profile
개발 기록

0개의 댓글