앱을 개발할 때는 먼저 오류 확인을 쉽게 유틸리티 클래스를 잘 만들어 두는 것이 좋다. 향후 많은 시간을 절약할 수 있도록 Flutter를 공부하면서 먼저 이런 것을 작성했다.
1. Log 기능 : Android의 TAG도 있고, 중요도도 있는 Log 기능이 필요했다.
2. FileLog : 가능하면 중요한 오류는 File에도 쓰면 좋겠다.
3. 예외가 발생하면, Log를 출력하고, File에도 쓰고, Toast도 띄우고, 노티도 만들고, 가능하면 Alert 다이얼로그도 띄웠으면 좋겠다. 프로덕면 모드라면 샘플링해서 서버에 로그를 남겼으면 좋겠다.
4. 크래시가 발생하면 서버에 로그를 남긴다.
Log 기능은 Fimber라는 플러그인을 이용했다. https://pub.dev/packages/fimber 테스트해본 결과, W나 E로 로그를 남겨도 Android studio의 Logcat에서도 같은 중요도로 표시되는 것은 아니었다. 사실 이게 가장 필요한 요구사항이었는데 ..
안드로이드의 Log 클래스가 사용하기 편하고 익숙해서 동일한 이름으로 비슷한 기능을 만들었다. https://github.com/dajkim76/flutter_base/commit/b453224c84b8bff239d7a4b4ae6074662132378a
노티 기능도 플러그인을 이용했다. https://pub.dev/packages/flutter_local_notifications 사용을 단순하기 하기위해서 NotiManager라는 클래스를 만들었다. https://github.com/dajkim76/flutter_base/commit/59f2d2debb6648fd1f15c2017532f5673d5af605 안드로이드 오레오 이상에서는 노티 채널도 만들어야하는데 플러그인에서 다 해주고 있어서 별 문제없이 동작했다.
토스트 기능도 플러그인을 이용했다. 네이티브 기능을 이용하려면 대부분 뭘 하려면 플러그인을 통하지 않고는 불가능하다. https://pub.dev/packages/fluttertoast
정리해서 DebugUtils를 작성했다. 예외가 발생하면 log찍고, 노티 만들고, 토스트를 띄운다. 토스트는 2초후에 사라지기 때문에 에러를 놓치지 않으려면 노티를 만드는게 좋다. catch에서 DebugUtils.exception만 호출해 주면 확인은 매우 쉬워진다. https://github.com/dajkim76/flutter_base/commit/45bf9c9df6626787b543cad02dc2cad4e089ac5f
File 로깅은 아직 방법을 찾아보지는 않았고, 크래시 로깅은 Firebase를 이용하면 된다. https://pub.dev/packages/firebase_crashlytics Firebase에서 Flutter 플러그인을 잘 지원하고있어서 Flutter를 시작하기에는 적절한 타이밍이 아닌가 싶다. https://firebaseopensource.com/projects/flutter/plugins/