Skip to content

Commit 71afa75

Browse files
committed
fix(notifications): fixes
1 parent dbf55bf commit 71afa75

File tree

4 files changed

+71
-65
lines changed

4 files changed

+71
-65
lines changed

android/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
additional functionality it is fine to subclass or reimplement
77
FlutterApplication and put your custom class here. -->
88
<uses-permission android:name="android.permission.INTERNET" />
9+
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
910
<queries>
1011
<intent>
1112
<action android:name="android.intent.action.INSERT" />

lib/api/race_components.dart

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -344,25 +344,29 @@ class RacesList extends StatelessWidget {
344344
Duration(minutes: 5),
345345
);
346346

347-
await AwesomeNotifications().createNotification(
348-
content: NotificationContent(
349-
id: createUniqueId(),
350-
channelKey: 'eventTracker',
351-
title: race['race']['meetingName'],
352-
body: "Be ready! ${session['description']} is starting soon!",
353-
payload: {'meetingId': meetingId, 'session': session['session']},
354-
),
355-
schedule: NotificationCalendar(
356-
allowWhileIdle: true,
357-
repeats: false,
358-
millisecond: 0,
359-
second: sessionDate.second,
360-
minute: sessionDate.minute,
361-
hour: sessionDate.hour,
362-
day: sessionDate.day,
363-
month: sessionDate.month,
364-
),
365-
);
347+
if (sessionDate.isAfter(DateTime.now())) {
348+
await AwesomeNotifications().createNotification(
349+
content: NotificationContent(
350+
id: createUniqueId(),
351+
channelKey: 'eventTracker',
352+
title: race['race']['meetingName'],
353+
body: "Be ready! ${session['description']} is starting soon!",
354+
payload: {'meetingId': meetingId, 'session': session['session']},
355+
),
356+
schedule: NotificationCalendar(
357+
allowWhileIdle: true,
358+
repeats: false,
359+
millisecond: 0,
360+
preciseAlarm: true,
361+
second: sessionDate.second,
362+
minute: sessionDate.minute,
363+
hour: sessionDate.hour,
364+
day: sessionDate.day,
365+
month: sessionDate.month,
366+
timeZone: 'GMT${session['gmtOffset']}',
367+
),
368+
);
369+
}
366370
}
367371
}
368372

@@ -372,10 +376,7 @@ class RacesList extends StatelessWidget {
372376
scheduledNotification(items[0].meetingId);
373377
}
374378
return isUpNext
375-
? //FutureBuilder(
376-
// future: scheduledNotification(items[0]),
377-
// builder: (context, snapshot) =>
378-
ListView.builder(
379+
? ListView.builder(
379380
scrollDirection: Axis.vertical,
380381
shrinkWrap: true,
381382
itemCount: items.length,

lib/config/notifications.dart

Lines changed: 5 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
import 'package:awesome_notifications/awesome_notifications.dart';
21-
import 'package:boxbox/api/formula1.dart';
21+
import 'package:boxbox/main.dart';
2222
import 'package:hive_flutter/hive_flutter.dart';
2323
import 'package:workmanager/workmanager.dart';
2424

@@ -36,6 +36,10 @@ class Notifications {
3636
Future<void> registerPeriodicTask() async {
3737
int refreshInterval =
3838
Hive.box('settings').get('refreshInterval', defaultValue: 6) as int;
39+
40+
await Workmanager().initialize(
41+
callbackDispatcher,
42+
);
3943
await Workmanager().registerPeriodicTask(
4044
'newsLoader',
4145
"Load news in background",
@@ -76,9 +80,6 @@ class Notifications {
7680
}
7781

7882
if (notificationsEnabled && newsNotificationsEnabled) {
79-
await Workmanager().initialize(
80-
callbackDispatcher,
81-
);
8283
await registerPeriodicTask();
8384
}
8485
}
@@ -114,42 +115,4 @@ class Notifications {
114115
),
115116
);
116117
}
117-
118-
@pragma('vm:entry-point')
119-
void callbackDispatcher() {
120-
Workmanager().executeTask(
121-
(task, inputData) async {
122-
await Hive.initFlutter();
123-
Box hiveBox = await Hive.openBox("requests");
124-
Box settingsBox = await Hive.openBox("settings");
125-
Map cachedNews = hiveBox.get('news', defaultValue: {}) as Map;
126-
bool useDataSaverMode =
127-
settingsBox.get('useDataSaverMode', defaultValue: false) as bool;
128-
try {
129-
Map fetchedData = await Formula1().getRawNews(0);
130-
if (cachedNews.isNotEmpty &&
131-
fetchedData['items'][0]['id'] != cachedNews['items'][0]['id']) {
132-
bool hasBreaking = false;
133-
for (var article in fetchedData['items']) {
134-
if (article['id'] == cachedNews['items'][0]['id']) {
135-
break;
136-
} else if (article['breaking'] != null && article['breaking']) {
137-
showArticleNotification(article, useDataSaverMode);
138-
hasBreaking = true;
139-
}
140-
}
141-
if (!hasBreaking) {
142-
showArticleNotification(
143-
fetchedData['items'][0], useDataSaverMode);
144-
}
145-
146-
hiveBox.put('news', fetchedData);
147-
}
148-
return Future.value(true);
149-
} catch (error, _) {
150-
return Future.value(false);
151-
}
152-
},
153-
);
154-
}
155118
}

lib/main.dart

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import 'dart:async';
2323

2424
import 'package:adaptive_theme/adaptive_theme.dart';
2525
import 'package:background_downloader/background_downloader.dart';
26+
import 'package:boxbox/api/formula1.dart';
2627
import 'package:boxbox/config/notifications.dart';
2728
import 'package:boxbox/config/router.dart';
2829
import 'package:awesome_notifications/awesome_notifications.dart';
@@ -36,6 +37,7 @@ import 'package:go_router/go_router.dart';
3637
import 'package:hive_flutter/hive_flutter.dart';
3738
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
3839
import 'package:timeago/timeago.dart' as timeago;
40+
import 'package:workmanager/workmanager.dart';
3941

4042
void main() async {
4143
WidgetsFlutterBinding.ensureInitialized();
@@ -58,6 +60,45 @@ void main() async {
5860
runApp(const MyApp());
5961
}
6062

63+
@pragma('vm:entry-point')
64+
void callbackDispatcher() {
65+
Workmanager().executeTask(
66+
(task, inputData) async {
67+
await Hive.initFlutter();
68+
Box hiveBox = await Hive.openBox("requests");
69+
Box settingsBox = await Hive.openBox("settings");
70+
Map cachedNews = hiveBox.get('news', defaultValue: {}) as Map;
71+
bool useDataSaverMode =
72+
settingsBox.get('useDataSaverMode', defaultValue: false) as bool;
73+
try {
74+
Map fetchedData = await Formula1().getRawNews(0);
75+
if (cachedNews.isNotEmpty &&
76+
fetchedData['items'][0]['id'] != cachedNews['items'][0]['id']) {
77+
bool hasBreaking = false;
78+
for (var article in fetchedData['items']) {
79+
if (article['id'] == cachedNews['items'][0]['id']) {
80+
break;
81+
} else if (article['breaking'] != null && article['breaking']) {
82+
Notifications()
83+
.showArticleNotification(article, useDataSaverMode);
84+
hasBreaking = true;
85+
}
86+
}
87+
if (!hasBreaking) {
88+
Notifications().showArticleNotification(
89+
fetchedData['items'][0], useDataSaverMode);
90+
}
91+
92+
hiveBox.put('news', fetchedData);
93+
}
94+
return Future.value(true);
95+
} catch (error, _) {
96+
return Future.value(false);
97+
}
98+
},
99+
);
100+
}
101+
61102
void setTimeagoLocaleMessages() {
62103
timeago.setLocaleMessages('ar', timeago.ArMessages());
63104
timeago.setLocaleMessages('ar_short', timeago.ArShortMessages());

0 commit comments

Comments
 (0)