質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

2567閲覧

flutterでflutter_local_notificationsを用いて毎日一定の時間にローカル通知を送りたい

Kanadekana_nana

総合スコア8

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2021/09/18 09:06

編集2021/09/18 11:23

したいこと

flutter初心者です。iosに対応した定期的にローカル通知を送るアプリを開発したいと考えています。。 現在はiosだけに対応したもので大丈夫です。調べれば調べるほどわからなくなっていくのでここ質問させていただきました。

何もしないでも定期的に通知を送る機能を実装したいと考えているのですがいまいち方法がわかりません。

試したこと

ネット記事の情報から、flutter_local_notificationsプラグインをインポートしzonedScheduleから通知ボタンを押したn秒後に通知を送信するプログラムはかけましたので下に載せます。これを改良する形で行きたいと考えています。無駄な部分、書き方のおかしな部分があれば追記していただけると助かります。
定期的にリマインドし、選択肢を送信させることを目的としたアプリなのでラジオボタンの部分は関係ないので無視してください。
AppDelegate.swiftは編集済みです。

main.dart

1import 'package:flutter/material.dart'; 2import 'package:timezone/data/latest.dart' as tz; 3import 'package:timezone/timezone.dart' as tz; 4 5void main() { 6 tz.initializeTimeZones(); 7 tz.setLocalLocation(tz.getLocation("Asia/Tokyo")); 8 runApp(MyApp()); 9} 10 11class MyApp extends StatelessWidget { 12 @override 13 Widget build(BuildContext context) { 14 return MaterialApp( 15 title: 'test', 16 theme: ThemeData( 17 primarySwatch: Colors.green, 18 ), 19 home: LocalNotificationScreen(), 20 ); 21 } 22} 23 24enum RadioValue { FIRST, SECOND, THIRD, FOURTH, FIFTH } 25final flnp = FlutterLocalNotificationsPlugin(); 26 27class LocalNotificationScreen extends StatefulWidget { 28 @override 29 _LocalNotificationScreenState createState() => 30 _LocalNotificationScreenState(); 31} 32 33class _LocalNotificationScreenState extends State<LocalNotificationScreen> { 34 RadioValue _gValue = RadioValue.THIRD; 35 36 @override 37 void initState() { 38 flnp.initialize( 39 InitializationSettings( 40 iOS: IOSInitializationSettings(), 41 ), 42 ); 43 } 44 45 @override 46 Widget build(BuildContext context) { 47 return Scaffold( 48 appBar: AppBar( 49 title: Text("test"), 50 ), 51 body: SafeArea( 52 child: Center( 53 child: Column( 54 children: [ 55 Padding( 56 padding: const EdgeInsets.fromLTRB(30, 50, 30, 30), 57 child: Text( 58 "1つ選んで送信ボタンを押してください。", 59 style: TextStyle( 60 fontSize: 16, 61 ), 62 ), 63 ), 64 RadioListTile( 65 title: Text('1'), 66 value: RadioValue.FIRST, 67 groupValue: _gValue, 68 onChanged: (value) => _onRadioSelected(value), 69 ), 70 RadioListTile( 71 title: Text('2'), 72 value: RadioValue.SECOND, 73 groupValue: _gValue, 74 onChanged: (value) => _onRadioSelected(value), 75 ), 76 RadioListTile( 77 title: Text('3'), 78 value: RadioValue.THIRD, 79 groupValue: _gValue, 80 onChanged: (value) => _onRadioSelected(value), 81 ), 82 RadioListTile( 83 title: Text('4'), 84 value: RadioValue.FOURTH, 85 groupValue: _gValue, 86 onChanged: (value) => _onRadioSelected(value), 87 ), 88 RadioListTile( 89 title: Text('5'), 90 value: RadioValue.FIFTH, 91 groupValue: _gValue, 92 onChanged: (value) => _onRadioSelected(value), 93 ), 94 SizedBox( 95 height: 50.0, 96 ), 97 ElevatedButton( 98 onPressed: () { 99 print(_gValue); 100 }, 101 child: Text("送信"), 102 ), 103 ElevatedButton( 104 onPressed: () { 105 //押したら通知 106 notify(); 107 }, 108 child: Text("通知"), 109 ) 110 ], 111 ), 112 ), 113 ), 114 ); 115 } 116 117 _onRadioSelected(value) { 118 setState(() { 119 _gValue = value; 120 }); 121 } 122 123 void notify() { 124 flnp.zonedSchedule( 125 0, 126 'title', 127 'body', 128 tz.TZDateTime.now(tz.UTC).add(Duration(seconds: 10)), 129 NotificationDetails(), 130 androidAllowWhileIdle: true, 131 uiLocalNotificationDateInterpretation: 132 UILocalNotificationDateInterpretation.absoluteTime, 133 ); 134 } 135}

これを将来的には通知ボタンをなくし、何もしなくても一定時間毎に通知を送りたいと考えています。
flutter, dart初心者なので書き方等未熟なところがあるとは思いますがよろしくお願いします。

補足:firebaseを使えばプッシュ通知を簡単に実装できるらしいですが、iosの場合デベロッパー登録でお金が取られるらしいのでやめておきます。

環境

flutter2.2.3
テスト機: iPhone12 pro max

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

periodicallyShowを用いればできました。

投稿2021/09/19 15:59

Kanadekana_nana

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問