발단
실시간 DB로 옮기고 DB구조를 어느정도 정한 후에 테스트를 위해 더미 데이터를 넣어보았다.
현 프로젝트에는 DB구조가 아래와 같다.
String todoid;
DateTime date;
String title;
List<Map<String, bool>> repeat;
String user;
String creator;
bool alarm;
String description;
bool complete;
이때 todoid
는 현재 DateTime
으로 나온 값을 String
으로 변환 시킨 값을 사용한다.
번호나 일정 규칙이 있는 값을 id 삼아 사용하려고 했는데, 그렇게 되면 추가로 생각해야할게 많아져서 단순한 프로젝트인 만큼 단순하게 잡았다.
그런데 더미데이터를 넣는 함수를 실행시키자 시뮬레이터 내부에서 앱이 바로 종료되어버렸다.
보통 앱이 어떠한 이유로 종료되거나 실행할 수 없으면 터미널에 로그가 작성되거나, 시뮬레이터에 그 이유를 알려줬는데 그 어떠한 로그도 없이 종료되었다.
종료되고 나서 그나마 다행히 MacOS의 버그 리포트가 나와서 로그를 보려고 했는데, 상당히 길었다…▼
탐색
그래도 로그에서 뭔가를 알 수 있지 않을까 하고 읽어보다가 “bug_type” : ”309”이라는 것을 보고 바로 검색해보았다.▼
찾아본 결과 iOS에서 종종 일어나는 문제인것 같은데, ARM 프로세서 에서만 일어나는 것 같았다.
대부분 plist를 고쳐서 해결이 되었다고 하는데, 다 괜찮다가 함수 호출시에 문제가 생기는게 이상하여 내가 작성한 함수를 보기로 했다.
그러던 도중 firebase realtime DB의 필드에 넣을 수 없는 값이 있는게 아닌가 하는 생각이 들어서 todoid
로 썼던 DateTime
을 봤다.
DateTime 형식은 2023-03-18 23:17:57.695471
이런 형태였다.
Firebase realtime DB에 들어가지 못하는 문자가 -
, :
, .
이렇게 세 개가 있었는데, 이 중 .
이 이름으로 들어갈 수 없었다.
해결 방안
웹으로 Realtime DB에 가서 .
을 넣으니 오류가 나는 것을 확인하고, 코드를 아래와 같이 고쳤다.
//기존 코드
DateTime().now().toString();
//바꾼 코드
DateTime().now().toString().replaceAll('.', '_');
이렇게 하면 2023-03-18 23:17:57_695471
의 형태가 되어 firebase realtime DB API에서 오류를 일으키지 않아 더 이상 앱이 강제종료 되는 현상이 일어나지 않았다.
코드를 짤 때 대부분의 프로그래밍 언어에서 변수 이름에 .
은 연산자니까 넣지 못하게 한 것을 보면 당연한 것이기도 한데, 그냥 String
으로 들어가는 건 괜찮은게 아닌가 싶어 오류를 못찾은듯 하다.
'Develop > Flutter' 카테고리의 다른 글
[Flutter][Widget] Step Indicator 구현 (0) | 2024.02.29 |
---|---|
[Flutter][Error] Unhandled Exception: MissingPluginException (0) | 2024.02.28 |
[Flutter][Error] CocoaPod Dependency 오류 (0) | 2024.02.16 |
[Flutter][Package] ScreenUtil 패키지 (0) | 2024.02.15 |
[Flutter][Widget] Spacer 위젯 (0) | 2024.02.14 |