Flutter, Dart 버전을 마이그레이션 하면서 일부 Widget의 변화가 있었습니다.
그 중, 가장 크게 눈에 띄었던 것은 WillPopScope
였습니다.
WillPopScope 과 같이 보여지며, 아래의 메시지를 보여주었습니다.
'WillPopScope' is deprecated and shouldn't be used. Use PopScope instead. This feature was deprecated after v3.12.0-1.0.pre.
어떠한 이유로 더 이상 사용하지 않도록 변경을 했는지에 대한 설명은 공식문서에 표기되어 있지 않지만,
추측하건대, API의 일관성과 명확성을 높이기 위함과
새로운 위젯으로 기존 위젯보다 더 많은 기능을 제공하거나, 기존 문제를 해결할 수 있다는 기능적 개선이라는 점에서
PopScope
는 WillPopScope의 기능을 포함하면서도 추가적인 이점이 있을 수 있습니다.
마이그레이션한 버전은 아래와 같습니다.
Flutter v 3.10.6
Dart v 3.0.6
DevTool v 2.23.1
Flutter v 3.16.8
Dart v 3.2.5
DevTool v 2.28.5
위의 메시지와 같이, 이제는 WillPopScope를 PopScope로 대체하여 사용해야 합니다.
WillPopScope(
onWillPop: () async {
// 뒤로 가기 버튼을 눌렀을 때의 로직
return true; // 또는 false;
},
child: Scaffold(
// ...
),
);
PopScope(
canPop: false, // onPopInvoked가 작동하기 위해선 false 되어야 합니다.
onPopInvoked: (didPop) async {
if (didPop) {
return;
}
// 뒤로 가기 버튼을 눌렀을 때의 로직
},
참고 문서:
https://stackoverflow.com/questions/77529904/willpopscope-is-deprecated-in-flutter