106 lines
3.3 KiB
Dart
106 lines
3.3 KiB
Dart
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||
|
import 'package:smoke_cess_app/services/date_service.dart';
|
||
|
import 'package:timezone/timezone.dart';
|
||
|
|
||
|
class NotificationService {
|
||
|
static final NotificationService _notificationService =
|
||
|
NotificationService._internal();
|
||
|
|
||
|
factory NotificationService() {
|
||
|
return _notificationService;
|
||
|
}
|
||
|
|
||
|
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
|
||
|
FlutterLocalNotificationsPlugin();
|
||
|
|
||
|
NotificationService._internal();
|
||
|
|
||
|
Future<void> initNotification() async {
|
||
|
// Android initialization
|
||
|
const AndroidInitializationSettings initializationSettingsAndroid =
|
||
|
AndroidInitializationSettings('mipmap/ic_launcher');
|
||
|
|
||
|
// ios initialization
|
||
|
const DarwinInitializationSettings initializationSettingsIOS =
|
||
|
DarwinInitializationSettings(
|
||
|
requestAlertPermission: false,
|
||
|
requestBadgePermission: false,
|
||
|
requestSoundPermission: false,
|
||
|
);
|
||
|
|
||
|
const InitializationSettings initializationSettings =
|
||
|
InitializationSettings(
|
||
|
android: initializationSettingsAndroid,
|
||
|
iOS: initializationSettingsIOS);
|
||
|
// the initialization settings are initialized after they are setted
|
||
|
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
|
||
|
}
|
||
|
|
||
|
Future<void> showNotification() async {
|
||
|
await flutterLocalNotificationsPlugin.show(
|
||
|
0,
|
||
|
'test',
|
||
|
'test',
|
||
|
//schedule the notification to show after 2 seconds.
|
||
|
const NotificationDetails(
|
||
|
// Android details
|
||
|
android: AndroidNotificationDetails('main_channel', 'Main Channel',
|
||
|
channelDescription: "ashwin",
|
||
|
importance: Importance.max,
|
||
|
priority: Priority.max),
|
||
|
// iOS details
|
||
|
iOS: DarwinNotificationDetails(
|
||
|
sound: 'default.wav',
|
||
|
presentAlert: true,
|
||
|
presentBadge: true,
|
||
|
presentSound: true,
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
Future<void> setAllNotifications() async {
|
||
|
List<TZDateTime> moodDates = await getDatesforMood();
|
||
|
List<TZDateTime> sleepDates = await getDatesforSleep();
|
||
|
int index = 0;
|
||
|
for (var date in moodDates) {
|
||
|
setNotification(index, "Mood", "Evaluate your mood", date);
|
||
|
index++;
|
||
|
}
|
||
|
for (var date in sleepDates) {
|
||
|
setNotification(index, "Sleep", "Evaluate your sleep", date);
|
||
|
index++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Future<void> setNotification(
|
||
|
int id, String title, String body, TZDateTime tzDateTime) async {
|
||
|
await flutterLocalNotificationsPlugin.zonedSchedule(
|
||
|
id,
|
||
|
title,
|
||
|
body,
|
||
|
tzDateTime, //schedule the notification to show after 2 seconds.
|
||
|
const NotificationDetails(
|
||
|
// Android details
|
||
|
android: AndroidNotificationDetails('main_channel', 'Main Channel',
|
||
|
channelDescription: "ashwin",
|
||
|
importance: Importance.max,
|
||
|
priority: Priority.max),
|
||
|
// iOS details
|
||
|
iOS: DarwinNotificationDetails(
|
||
|
sound: 'default.wav',
|
||
|
presentAlert: true,
|
||
|
presentBadge: true,
|
||
|
presentSound: true,
|
||
|
),
|
||
|
),
|
||
|
|
||
|
// Type of time interpretation
|
||
|
uiLocalNotificationDateInterpretation:
|
||
|
UILocalNotificationDateInterpretation.absoluteTime,
|
||
|
androidAllowWhileIdle:
|
||
|
true, // To show notification even when the app is closed
|
||
|
);
|
||
|
}
|
||
|
}
|