오늘 해볼 것은 앱 아이콘 설정 및 알림(flutter_local_notification) 아이콘을 설정해주는 작업이다.
앱 아이콘 설정은 간단하다. 네이티브 폴더를 직접 건드리는 것도 가능하지만 flutter_launcher_icons 패키지를 사용하면 간단히 가능하다.
일단 해당 라이브러리를 임포트해주고 pub get을 해준다.
dependencies가 아니라 dev_dependencies에 등록을 해줘야 한다.
그 다음 아이콘으로 사용할 파일을 준비하자!! png 파일로 준비했다.
소문에 의하면 1024*1024 여야 하고 1024kb 이하 용량이어야 한다고 한다.
그러고 위 그대로 pubspec.ymal에 써주면 된다. 나는 그냥 하단에 썼다.
android: "launcher_icon" 뜻은 네이티브 디렉토리에 launcher_icon.png 이라는 파일명으로 생성하라는 것 같다.
image_path야 이미지 위치를 써주면 되는 것이고. (나는 assets폴더에 icon.png파일을 저장했으므로 저렇게 썼다)
flutter pub run flutter_launcher_icons:main
그러고 프로젝트 루트폴더 경로에서 위와 같이 터미널을 실행해주면 된다.
위 명령은 이미 설정된 경로와 이름 등을 바탕으로 실제 네이티브 폴더 및 파일 구성을 업데이트하라는 것이겠죠.
그러고 다시 실행하면 반영이 되어 있을 것.
아래 폴더 목록처럼 구성이 된다.
mimap ~~ 폴더들에 launcher_icon.png가 추가됐다. 폴더명 뒤의 사족은 아마 사이즈일 것이다. 사이즈별로 알맞게 변환되어 해당 폴더에 들어가 있는 것.
splash screen의 아이콘도 변경이 되더라. 아마도 루트 앱 아이콘을 끌어다 스플래시 스크린에 띄우는 것 같다. 이거는 나중에 알아보자. 정확한 원리는 모르겠다. 가끔 적용이 안되는 경우도 있던데.. 안된다면 splash screen은 따로 등록을 한번더 해주도록 하자.
놀랍게도 따로 설정을 해주지 않아도 위에서 설정한 launcher_icon.png가 그대로 적용된다. 하지만 안드로이드의 경우, 앱이 켜져 있을 땐 푸시알람을 줄 수 없는 lock이 걸려져 있다. 그래서 따로 flutter_local_notification이라는 패키지를 통해서 설정을 해주었다.(이전 게시물 참고...)
현재 상태 => 앱이 백그라운드 실행 상태일 때, 꺼져있을 때는 바뀐 아이콘이 푸쉬알림에 적용되어 있다.
하지만 앱이 켜져있을 때 오는 아이콘은 적용이 안 되어 있는 상태!!
[기존 코드]
await flutterLocalNotificationsPlugin.initialize(
const InitializationSettings(
android: AndroidInitializationSettings('@mipmap/ic_launcher'), iOS: IOSInitializationSettings()),
onSelectNotification: (String? payload) async {});
기존 코드의 android: AndroidInitializationSettings('@mipmap/ic_launcher'), 부분을 보자. @mipmap/ic_launcher라는 것은 해당 폴더 목록 바로 위 폴더 목록 사진에서 확인했던 폴더 안의 ic_launcher.png로 아이콘을 설정하겠다 이거다. 이렇게 내가 기존에 코드를 짜 놓은 이유는 위에서 런처 아이콘 설정을 하기 전에는 ic_launcher.png 밖에 없었기 때문이다. 이제 이걸 아래와 같이 변경해주자.
(왜인지 모르겠으나 파일 확장자 .png는 생략한다)
await flutterLocalNotificationsPlugin.initialize(
const InitializationSettings(
android: AndroidInitializationSettings('@mipmap/launcher_icon'), iOS: IOSInitializationSettings()),
onSelectNotification: (String? payload) async {});
이러면 이제 잘 된다!!