はじめに
今回は、flutterでアラーム機能を作る機会があったのでその際の知見を共有しようと思います。
現状flutterでアラーム実装に有用そうなライブラリはこのalarm: ^1.1.7一択になるかなと思います。
※ios,android両方で実装する場合に限りの話です。
androidのみ実装であれば結構サクサクできそうなんですが、iosに関しては結構沼です。
なので今回はalarmライブラリを使用した際にできる事できない事をそれぞれまとめていこうと思います。
導入
ライブラリの導入は以下、公式ドキュメントから各自行なってください。
ここでは、記載を省略します。
how to use
まず、以下をmain関数の中に書いていきます。
void main()async {
await Alarm.init()
}
次に以下のようにAlarmSettingのパラメータをそれぞれ埋めていきます。
final alarmSettings = AlarmSettings(
id: 42,
dateTime: dateTime,
assetAudioPath: 'assets/alarm.mp3',
loopAudio: true,
vibrate: true,
fadeDuration: 3.0,
notificationTitle: 'This is the title',
notificationBody: 'This is the body',
enableNotificationOnKill: true,
);
id..それぞれのアラームを識別するための識別子です。
dateTime..ここでタイマーが発現する時間を指定します。文字通りDateTime型で指定します。
assetAudioPath..ここでアラームの音源を指定します。※音源の設定方法等は別途ググって見てください
loopAudio..音源をループするかを決定します。
vibrate..バイブレーションを付けるか決定します。
notificationTitle..通知のタイトルを決定します
notificationBody..通知の本文を決定します。
enableNotificationOnKill..通知をタップした際にアラームをキルします。※なぜかうまく動作しない。。
その他のパラメータに関しても触って見てください。
できない事1
アプリをタスクキルした際(バックグラウンド状態)に、アラームが鳴らない。
これは、アプリの仕様によっては割と致命的かもですね。。
これに関しては公式ドキュメントで実現できない事は公言されているのでこのライブラリでの実現は難しそうですね。。
どうしてもバックグラウンドで動作するアラームを作りたいのであれば、一から自作するしかなさそうです。。
気が向いたらそこら辺に関しても別記事でまとめようと思いうます。
できない事2
通知をタップした際に、アラームを止めることができない。
ios標準のアラームアプリでは通知をタップしたらアラームは止まる仕様になっていてそのように実装するのが自然かと思います。
ですがなぜかこれがうまくいきません。。
enableNotificationOnKill: true,
stopOnNotificationOpen: true,
ドキュメントを参照する限るここら辺のパラメータをtrueにすればいけそうなんですけどね。
stackoverflowなどで同じようなissueが報告されていたのでライブラリ自体の不具合なのかな。。っていう印象です。
このバグに関しては引き続き調査していくので、続報があればまた報告します。
最後に
もし上記の不具合解決できましたよーみたいな事があれば、コメントいただけると非常に助かります!
最後までご覧いただいてありがとうございました。