WillScope는 현시점 deprecated되어 쓸 수는 있지만 언제 사라질지 모르는 위기에 놓여있다. 플러터에서는 WillScope 대신 PopScope를 사용하는 것을 권장하고 있다. 어떻게 PopScope를 사용해서 WillScope 코드를 수정하는지 알아보았다.
플러터에서 Navigator를 사용하여 화면 간의 전환을 관리하면 각각의 화면이 스택에 쌓이고, 이전 화면으로 돌아갈 수 있는 "뒤로 가기" 기능이 자동으로 지원된다. WillPopScope 위젯은 화면을 빠져 나갈 때 뒤로 가기 이벤트를 처리하고, 이벤트를 방지하거나 추가 작업을 수행할 수 있는 기능을 제공한다.
기존 코드
WillPopScope(
onWillPop: () async {
if (await _controller.canGoBack()) {
await _controller.goBack();
return false;
}
return true;
}
)
onWillPop은 WillPopScope 위젯에서 제공하는 콜백 함수로, 사용자가 뒤로 가기 버튼을 눌렀을 때 실행되는 로직을 정의하는 데 사용된다.
PopScope에는 canPop, onPopInvoked, child 속성이 주로 쓰인다. onWillPop은 onPopInvoked
WillPopScope와 동일한 로직으로 코드를 구성하고 싶다면 canPop을 false로 놓으면 된다.
PopScope로 migration한 코드
PopScope(
canPop: false,
onPopInvoked: (didPop) async {
if(await controller.canGoBack()) {
await controller.goBack();
} else {
_showBackDialog();
}
},
canPop을 true로 놓았을 때 좋은 점에 대해서는 더 공부가 필요하다. 급하면 canPop을 false로 놓고 하면 기존의 코드를 크게 수정하지 않아도 된다.
더 자세한 사항은 공식문서를 보자.