RE:ISC프로젝트 2-플러터로 돌아온 isc프로젝트
현재 진행상황 체크
비회원 유저의 경우 로그인 및 회원가입 서비스 안내 캐러셀 화면을 백 프론트 작업 모두 완료하였고, 회원의 경우 프로젝트 조회 서비스/프로젝트 수정 삭제/ 전체 등록가능 장비 확인을 완료한 뒤 장비 등록 페이지를 작성하는 중이다.
트러블 슈팅
조회와 ui의 경우 파이어베이스에서 자료를 끌어오는 과정에서 시간차가 발생하게 된다.
이 부분은 ui를 처음 보여줄 때에는 await async를 통한 초기화를 통해 쉽게 해결하였는데, 모종의 이유로 비정상적인 접근(예를 들어 서비스의 홈을 거치지 않고 프로젝트 세부 홈으로 바로 들어온다거나)히면 컨트롤러를 찾지 못하는 문제가 발생하였다.
원인
아주 간단한 문제인데 바로 컨트롤러가 생성되지 않았기 때문이다.
여기에서 한가지 의문은 분명 main에 모든 컨트롤러의 put을 집어넣었는데 왜 이렇게 돌아가는지였다.
플러터가 실행되었다는 것은 main함수의 실행을 보장한다.
여기까지는 내가 알고있는 것이 정확했으나, main함수 내의 컨트롤러 초기화 순서나 컨트롤러의 무조건적인 생성을 플러터에서 보장해주지는 않는다.
또한 파이어베이스에서 데이터를 가져오는 과정이 포함되어있는 내 컨트롤러 초기화 함수의 특성상 컨트롤러가 생성이 되었지만, 데이터는 없는 이상한 상황이 발생 가능한 것이다.
오류를 찾아낸 방법
우선, 비정상적인 접근에서도 컨트롤러가 생성되었는지를 확인하기 위하여 print문을 하나 찍어주었다.
생성이 되는 것을 확인 한 뒤에는 초기화 함수의 실행 시점이 문제인지 컨트롤러를 찾는 타이밍의 문제인지를 살펴보았다.
그 결과 컨트롤러가 생성되기도 이전에 컨트롤러에 접근하려고 하는 것이 문제임을 확인하였고, 그것을 해결하기 위해 컨트롤러를 비동기적으로 초기화하는 방식을 찾아보았다.
Getx의 PutAsync와 lazyPut
내가 원하는 내용을 구현하기에는 이 둘을 모두 사용할 수 있을 것 같았다.
lazyPut
의 경우 인스턴스를 바로 만드는 것이 아니라 사용되는 시점에서 생성을 하는 것이고 PutAsync의 경우 futer타입으로 초기화가 이루어져야하는 경우 사용을 할 수 있다.
이경우 생성이 문제가 아니라, 생성이후 초기화 단계에서 문제가 발생한 것이므로 PutAsync가 보다 적합할 것이라고 판단하였고 수정 이후 원하는대로 코드가 작동하는 것을 확인할 수 있었다.
댓글남기기