[Flutter/dart] local_notificationで通知画面にアイコンを表示する
概要
local_notificationというライブラリを使うと通知を作成することができます。公式のサンプルではタイトルと本文しかありませんが、ラインみたいにアイコンをつけることもできます。今回は通知画面にアイコンを表示する方法を紹介します。
方法
androidの場合
AndroidNotificationDetails()のlargeIcon:プロパティを設定します。
var styleInformation=DefaultStyleInformation(true, true);
var androidChannelSpecifics = AndroidNotificationDetails(
"channel_id",
"channel_name",
"channel_description",
importance: Importance.max,
priority: Priority.high,
largeIcon: FilePathAndroidBitmap(icon_path), //ここ!
styleInformation: styleInformation,
);
僕の場合はローカルにアイコン画像が保存してあるので、FilePathAndroidBitmap()の引数に画像のパス(icon_path)を渡しています。drawable resourceにある画像を使いたい場合はDrawableResourceAndroidBitmap()を使えばいけそうです(ドキュメントを読んだ限り、です。試していません)。
iosの場合
以下のようにします。icon_pathがアイコン画像のパスです。
var iosChannelSpecifics =IOSNotificationDetails(
attachments: [IOSNotificationAttachment(icon_path)]
);
注意しなければいけないのは、icon_pathに置いてある画像は通知を作成後にシステムにより移動させられてしまいます。通知の作成以外の場所でicon_pathを参照している場合は、ファイルをコピーし、そのパスを渡すようにしましょう。
ソース:https://developer.apple.com/documentation/usernotifications/unnotificationattachment
Once validated, attached files are moved into the attachment data store so that they can be accessed by all of the appropriate processes.
最後に、上記で作成したandroidChannelSpecificとisoChannelSpecificを引数としてplatformChannelSpecificを作成します。
var platformChannelSpecifics =
NotificationDetails(
android: androidChannelSpecifics,
iOS: iosChannelSpecifics
);
通知画面は以下のようになります。(iosです)

最後に
ラインみたいにアイコンをタイトルの前に持ってくるのはできないみたいですね(もしできるのならば教えてください!)。
iosで画像ファイルが移動されてしまうのがトラップでした。flutterでググっても全然情報が出てこず、最終的にiosのネイティブのリファレンスで見つけるという、、、
最新記事
すべて表示現象 アプリ内にAdmobを追加して、アプリを起動すると、下記のエラーが発生 java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider 原因 AndroidManifestの書き方が誤っていた。 <meta-data>はactivityと同じ階層にある必要が
概要 Uriを持っていて、Urlに変換したい場合の方法で少し手惑ったので共有します 方法 String url = uri.toString(); これだけです。 最後に ページを開くだけだとUriでもUrlでもいいんですが、WebViewはUrlを要求してくるんですよね。
問題 以前、日本語を含むURLを開くためには、エンコーディングしてやる必要がある、という記事を書きました。 しかし、すでにエンコーディングされているURLを再度エンコーディングしてしまうと、別のURLになってしまいます。 つまり、URLを開く処理の前に、 ・エンコーディングが必要なURLか ・すでにエンコーディングがされているか を判定しないといけないことになります。これは中々煩雑な処理です。 発