플러터를 최신 버전으로 업그레이드하면서,
context.pop()이 잘 되던 페이지에서 오류가 발생했다.
그 이유는 안드로이드에서 뒤로가기 키를 감지하려고 쓴 PopScope 위젯가 이유였다.
업그레이드 하기 전에는
PopScope(
canPop: false, // 페이지를 pop시킬 건지
onPopInvoked: (didPop) {
// pop을 감지했을 때의 로직 작성
context.pop();
},
child: Container(),
);
이런 식으로 페이지 이동을 막고 로직을 작성한 다음 context.pop()을 호출하는 식으로 처리했었는데
업그레이드 후에는
// ...
PopScope(
canPop: false, // 페이지를 pop시킬 건지
onPopInvokedWithResult: (didPop, result) {
if(!didPop) {
// 로직 작성
context.pop();
}
},
child: Container(),
);
onPopInvoked가 depreacted가 됐고, onPopInvokedWithResult로 변경되었으며,
작동 방식이 바뀌었다.
Object? result인 새로운 인자를 받게 되는데 아마 context.pop('text');에서의
'text'를 받아오는 게 아닐까 싶다.
canPop에 false 상태로 is not a true`라는 오류가 나왔던 것이다.~~context.pop();을 호출해서 `
나중에 다시 해보니, 됐던 방법이 안 돼서 다시 고생한 결과
if(!didPop)으로 분기를 나눠준 뒤 페이지 이동시켜야 오류가 발생하지 않았다.
변경 로그를 읽어야겠다... 귀찮지만