したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。