1
0
mirror of https://github.com/go-vikunja/app synced 2024-06-06 12:39:51 +00:00

bugfix reminder id

This commit is contained in:
benimautner 2022-04-22 21:39:01 +02:00
parent 6258e35dc4
commit 0d9029a207
2 changed files with 43 additions and 19 deletions

View File

@ -1,8 +1,7 @@
//import 'dart:math';
import 'dart:math';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:vikunja_app/api/client.dart';
import 'package:vikunja_app/api/label_task.dart';
@ -18,6 +17,8 @@ import 'package:vikunja_app/models/user.dart';
import 'package:vikunja_app/service/services.dart';
import 'package:timezone/data/latest_all.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
import 'package:flutter_local_notifications/flutter_local_notifications.dart'as notifs;
class VikunjaGlobal extends StatefulWidget {
final Widget child;
@ -56,13 +57,13 @@ class VikunjaGlobalState extends State<VikunjaGlobal> {
ListService get listService => new ListAPIService(client, _storage);
FlutterLocalNotificationsPlugin get notificationsPlugin => new FlutterLocalNotificationsPlugin();
notifs.FlutterLocalNotificationsPlugin get notificationsPlugin => new notifs.FlutterLocalNotificationsPlugin();
TaskServiceOptions get taskServiceOptions => new TaskServiceOptions();
NotificationClass get notifications => new NotificationClass();
NotificationAppLaunchDetails notifLaunch;
notifs.NotificationAppLaunchDetails notifLaunch;
LabelService get labelService => new LabelAPIService(client);
@ -71,12 +72,35 @@ class VikunjaGlobalState extends State<VikunjaGlobal> {
LabelTaskBulkAPIService get labelTaskBulkService =>
new LabelTaskBulkAPIService(client);
var androidSpecificsDueDate = notifs.AndroidNotificationDetails(
"Vikunja Due",
"Due Date Reminder",
channelDescription: "description",
icon: 'vikunja_logo',
importance: notifs.Importance.high
);
var androidSpecificsReminders = notifs.AndroidNotificationDetails(
"Vikunja Reminders",
"Due Date Reminder",
channelDescription: "description",
icon: 'vikunja_logo',
importance: notifs.Importance.high
);
notifs.IOSNotificationDetails iOSSpecifics;
notifs.NotificationDetails platformChannelSpecificsDueDate;
notifs.NotificationDetails platformChannelSpecificsReminders;
@override
void initState() {
super.initState();
_loadCurrentUser();
tz.initializeTimeZones();
notificationInitializer();
iOSSpecifics = notifs.IOSNotificationDetails();
platformChannelSpecificsDueDate = notifs.NotificationDetails(
android: androidSpecificsDueDate, iOS: iOSSpecifics);
platformChannelSpecificsReminders = notifs.NotificationDetails(
android: androidSpecificsReminders, iOS: iOSSpecifics);
}
void changeUser(User newUser, {String token, String base}) async {
@ -117,10 +141,20 @@ class VikunjaGlobalState extends State<VikunjaGlobal> {
value.forEach((task) {
if(task.reminderDates != null)
task.reminderDates.forEach((reminder) {
scheduleNotification("This is your reminder for '" + task.title + "'", task.description, notificationsPlugin, reminder);
scheduleNotification("This is your reminder for '" + task.title + "'",
task.description,
notificationsPlugin,
reminder,
platformChannelSpecifics: platformChannelSpecificsReminders,
id: (reminder.millisecondsSinceEpoch/1000).floor());
});
if(task.dueDate != null)
scheduleNotification("The task '" + task.title + "' is due.", task.description, notificationsPlugin, task.dueDate);
scheduleNotification("The task '" + task.title + "' is due.",
task.description,
notificationsPlugin,
task.dueDate,
platformChannelSpecifics: platformChannelSpecificsDueDate,
id: task.id);
})
);
});

View File

@ -48,25 +48,15 @@ class NotificationClass{
Future<void> scheduleNotification(String title, String description,
notifs.FlutterLocalNotificationsPlugin notifsPlugin,
DateTime scheduledTime, {String id}) async {
DateTime scheduledTime, {int id, notifs.NotificationDetails platformChannelSpecifics}) async {
if(scheduledTime.difference(DateTime.now()) < Duration.zero)
return;
if(id == null)
id = DateTime.now().toString();
var androidSpecifics = notifs.AndroidNotificationDetails(
"Vikunja",
"Due Date Reminder",
channelDescription: "description",
icon: 'vikunja_logo',
importance: notifs.Importance.high
);
var iOSSpecifics = notifs.IOSNotificationDetails();
var platformChannelSpecifics = notifs.NotificationDetails(
android: androidSpecifics, iOS: iOSSpecifics);
id = Random().nextInt(1000000);
final String currentTimeZone = await FlutterNativeTimezone.getLocalTimezone();
tz.TZDateTime time = tz.TZDateTime.from(scheduledTime,tz.getLocation(currentTimeZone));
//time.add(Duration(hours: -2));
await notifsPlugin.zonedSchedule(Random().nextInt(100000000), title, description,
await notifsPlugin.zonedSchedule(id, title, description,
time, platformChannelSpecifics, androidAllowWhileIdle: true, uiLocalNotificationDateInterpretation: notifs.UILocalNotificationDateInterpretation.wallClockTime); // This literally schedules the notification
}