diff --git a/filcnaplo/lib/api/login.dart b/filcnaplo/lib/api/login.dart index 9f3b2fd..02ec3a8 100644 --- a/filcnaplo/lib/api/login.dart +++ b/filcnaplo/lib/api/login.dart @@ -54,11 +54,6 @@ Future loginApi({ "content-type": "application/x-www-form-urlencoded", }; - String nonceStr = await Provider.of(context, listen: false) - .getAPI(KretaAPI.nonce, json: false); - - Nonce nonce = getNonce(nonceStr, username, instituteCode); - Map? res = await Provider.of(context, listen: false) .postAPI(KretaAPI.login, headers: headers, diff --git a/filcnaplo/lib/helpers/notification_helper.dart b/filcnaplo/lib/helpers/notification_helper.dart index c1cfcb6..ff0eb05 100644 --- a/filcnaplo/lib/helpers/notification_helper.dart +++ b/filcnaplo/lib/helpers/notification_helper.dart @@ -4,7 +4,6 @@ import 'dart:ui'; import 'package:filcnaplo/api/providers/database_provider.dart'; import 'package:filcnaplo/api/providers/status_provider.dart'; import 'package:filcnaplo/api/providers/user_provider.dart'; -import 'package:filcnaplo/database/init.dart'; import 'package:filcnaplo/models/settings.dart'; import 'package:filcnaplo/helpers/notification_helper.i18n.dart'; import 'package:filcnaplo_kreta_api/client/client.dart'; @@ -19,7 +18,6 @@ class NotificationsHelper { FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); DatabaseProvider database = DatabaseProvider(); - var db = await initDB(database); await database.init(); SettingsProvider settingsProvider = await database.query.getSettings(database); @@ -45,14 +43,15 @@ class NotificationsHelper { // loop through grades and see which hasn't been seen yet for (Grade grade in grades) { // if the grade was added over a week ago, don't show it to avoid notification spam - if (grade.seenDate.isAfter(lastSeenGrade) && grade.date.difference(DateTime.now()).inDays * -1 < 7) { + if (grade.seenDate.isAfter(lastSeenGrade) && + grade.date.difference(DateTime.now()).inDays * -1 < 7) { // send notificiation about new grade const AndroidNotificationDetails androidNotificationDetails = AndroidNotificationDetails('GRADES', 'Jegyek', channelDescription: 'Értesítés jegyek beírásakor', importance: Importance.max, priority: Priority.max, - color: const Color(0xFF3D7BF4), + color: Color(0xFF3D7BF4), ticker: 'Jegyek'); const NotificationDetails notificationDetails = NotificationDetails(android: androidNotificationDetails); diff --git a/filcnaplo/lib/main.dart b/filcnaplo/lib/main.dart index 9f5c788..a7ad317 100644 --- a/filcnaplo/lib/main.dart +++ b/filcnaplo/lib/main.dart @@ -6,7 +6,6 @@ import 'package:filcnaplo/api/providers/database_provider.dart'; import 'package:filcnaplo/database/init.dart'; import 'package:filcnaplo/helpers/notification_helper.dart'; import 'package:filcnaplo/models/settings.dart'; -import 'package:filcnaplo_kreta_api/client/client.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:filcnaplo/app.dart'; @@ -57,50 +56,48 @@ class Startup { // Get permission to show notifications if (Platform.isAndroid) { await flutterLocalNotificationsPlugin - .resolvePlatformSpecificImplementation< - AndroidFlutterLocalNotificationsPlugin>()! - .requestPermission(); - } - else if (Platform.isIOS) { + .resolvePlatformSpecificImplementation< + AndroidFlutterLocalNotificationsPlugin>()! + .requestPermission(); + } else if (Platform.isIOS) { await flutterLocalNotificationsPlugin - .resolvePlatformSpecificImplementation< - IOSFlutterLocalNotificationsPlugin>() - ?.requestPermissions( - alert: false, - badge: true, - sound: true, - ); - } - else if (Platform.isMacOS) { + .resolvePlatformSpecificImplementation< + IOSFlutterLocalNotificationsPlugin>() + ?.requestPermissions( + alert: false, + badge: true, + sound: true, + ); + } else if (Platform.isMacOS) { await flutterLocalNotificationsPlugin - .resolvePlatformSpecificImplementation< - MacOSFlutterLocalNotificationsPlugin>() - ?.requestPermissions( - alert: false, - badge: true, - sound: true, - ); + .resolvePlatformSpecificImplementation< + MacOSFlutterLocalNotificationsPlugin>() + ?.requestPermissions( + alert: false, + badge: true, + sound: true, + ); } // Platform specific settings - final DarwinInitializationSettings initializationSettingsDarwin = - DarwinInitializationSettings( - requestSoundPermission: true, - requestBadgePermission: true, - requestAlertPermission: false, - ); + const DarwinInitializationSettings initializationSettingsDarwin = + DarwinInitializationSettings( + requestSoundPermission: true, + requestBadgePermission: true, + requestAlertPermission: false, + ); const AndroidInitializationSettings initializationSettingsAndroid = - AndroidInitializationSettings('ic_notification'); - final InitializationSettings initializationSettings = InitializationSettings( - android: initializationSettingsAndroid, - iOS: initializationSettingsDarwin, - macOS: initializationSettingsDarwin - ); + AndroidInitializationSettings('ic_notification'); + const InitializationSettings initializationSettings = + InitializationSettings( + android: initializationSettingsAndroid, + iOS: initializationSettingsDarwin, + macOS: initializationSettingsDarwin); - // Initialize notifications - await flutterLocalNotificationsPlugin.initialize( - initializationSettings, - ); + // Initialize notifications + await flutterLocalNotificationsPlugin.initialize( + initializationSettings, + ); } } @@ -129,36 +126,44 @@ Widget errorBuilder(FlutterErrorDetails details) { return Container(); }); } - Future initPlatformState() async { - // Configure BackgroundFetch. - int status = await BackgroundFetch.configure(BackgroundFetchConfig( - minimumFetchInterval: 15, - stopOnTerminate: false, - enableHeadless: true, - requiresBatteryNotLow: false, - requiresCharging: false, - requiresStorageNotLow: false, - requiresDeviceIdle: false, - requiredNetworkType: NetworkType.ANY, - startOnBoot: true - ), (String taskId) async { // <-- Event handler + +Future initPlatformState() async { + // Configure BackgroundFetch. + int status = await BackgroundFetch.configure( + BackgroundFetchConfig( + minimumFetchInterval: 15, + stopOnTerminate: false, + enableHeadless: true, + requiresBatteryNotLow: false, + requiresCharging: false, + requiresStorageNotLow: false, + requiresDeviceIdle: false, + requiredNetworkType: NetworkType.ANY, + startOnBoot: true), (String taskId) async { + // <-- Event handler + if (kDebugMode) { print("[BackgroundFetch] Event received $taskId"); - NotificationsHelper().backgroundJob(); - BackgroundFetch.finish(taskId); - }, (String taskId) async { // <-- Task timeout handler. + } + NotificationsHelper().backgroundJob(); + BackgroundFetch.finish(taskId); + }, (String taskId) async { + // <-- Task timeout handler. + if (kDebugMode) { print("[BackgroundFetch] TASK TIMEOUT taskId: $taskId"); - BackgroundFetch.finish(taskId); - }); + } + BackgroundFetch.finish(taskId); + }); + if (kDebugMode) { print('[BackgroundFetch] configure success: $status'); - BackgroundFetch.scheduleTask(TaskConfig( - taskId: "com.transistorsoft.refilcnotification", - delay: 900000, // 15 minutes - periodic: true, - forceAlarmManager: true, - stopOnTerminate: false, - enableHeadless: true - )); } + BackgroundFetch.scheduleTask(TaskConfig( + taskId: "com.transistorsoft.refilcnotification", + delay: 900000, // 15 minutes + periodic: true, + forceAlarmManager: true, + stopOnTerminate: false, + enableHeadless: true)); +} @pragma('vm:entry-point') void backgroundHeadlessTask(HeadlessTask task) { @@ -170,7 +175,7 @@ void backgroundHeadlessTask(HeadlessTask task) { } BackgroundFetch.finish(taskId); return; - } + } if (kDebugMode) { print('[BackgroundFetch] Headless event received.'); } diff --git a/filcnaplo_mobile_ui/lib/pages/home/live_card/live_card.dart b/filcnaplo_mobile_ui/lib/pages/home/live_card/live_card.dart index aed3234..e2effb0 100755 --- a/filcnaplo_mobile_ui/lib/pages/home/live_card/live_card.dart +++ b/filcnaplo_mobile_ui/lib/pages/home/live_card/live_card.dart @@ -58,7 +58,7 @@ class _LiveCardState extends State { key: const Key('livecard.summary'), title: '', icon: FeatherIcons.arrowRight, - description: Text(''), + description: const Text(''), onTap: () => Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) => const SummaryScreen(