“Looking up a deactivated widget’s ancestor is unsafe” 오류
“Firebase Auth를 구현하고, 앱 내, 회원가입에서 요구되는 정보를 입력 후, 등록 버튼을 누르면 다음과 같은 오류가 발생했다.”
“Flutter에서 위젯이 비활성화된 상태(deactivated state)에서 위젯 트리의 상위 위젯(ancestor)에 접근하려 할 때 오류가 발생했다는 것이다. 즉, 위젯이 위젯 트리에서 제거된 후, 해당 위젯의 BuildContext를 사용하여 상위 위젯에 접근하려하여 오류가 났다는 것.”
“하지만 내 예상대로라면 정상적으로 회원가입을 진행했기 때문에, AsyncValue.guard
의 true
조건따라 아래 로직대로 InterestsScreen으로 이동해야 했었다.”
1
2
3
4
5
if (state.hasError) {
showFirebaseErrorSnack(context, state.error);
} else {
context.goNamed(InterestsScreen.routeName);
}
문제 해결
“하지만 이 경우, 앱 사용자가 도중에 뒤로가기나 다른 화면으로 이동하게되면 SignUp
메서드를 호출하는 BirthdayScreen이 제거될 수 있는데, 그렇게되면 signUp
메서드 내에서 context
를 사용하는 시점에 이미 context
가 속한 위젯이 위젯 트리에서 제거되어 비활성화된 상태가 될 수 있기 때문에 이런 오류가 출력된다는 것이다.”