
async 함수에서 buildcontext를 사용할 때 생기는 문제에 대해 알아보자

이 함수를 살펴보자.
async 함수로 첫 줄에서 getPlayLists 라는 비동기 함수를 호출한 뒤 context.pop 을 수행한다. 그런데 BuildContext를 참조하기 전 context.mounted라는 조건을 달아두었다. 코드 구성에서 알 수 있듯이 오늘의 주제가 된 오류는 비동기 함수에서 BuildContext를 참조하려고 할 때 발생하는 이슈이다.
오늘은 이 조건이 왜 필요한지, 지키지 않으면 어떤 문제가 발생하고 어떻게 해결할 수 있는지 알아보자.
Flutter에서 위젯은 트리의 구성 요소가 변동함에 따라 얼마든지 삭제하고 새로 생성될 수 있다. 그런데 만약 비동기 함수가 작업하는 동안 위젯에 변동사항이 생긴다면, 그 다음에 참조해야 하는 context 또한 이전과 달라졌을 것이다.
이런 까닭에 유효하지 않은 BuildContext를 참조할 가능성이 있으므로 당장 오류가 발생하지 않더라도 안정성이 떨어지는 코드 구성이라고 할 수 있다.
BuildContext를 사용하기 전에 이 context가 아직 유효한지(현재 위젯 트리에 마운트되어있는지) 검사하는 방법이다.
// 함수에서
if(mounted){}
// 위젯에서
if(context.mounted){}
state등을 활용해서 ui를 조정하는 방식이다. 위젯이 자주 리뉴얼되고 다양한 상태가 얽혀 있는 페이지를 구성한다면 context를 활용한 네비게이션을 남용하기보다 페이지 자체의 상태 관리를 이용하자.