@@ -7,34 +7,19 @@ import 'package:workmanager/workmanager.dart';
77import 'package:flutter_local_notifications/flutter_local_notifications.dart' ;
88import 'package:arabic_learning/package_replacement/storage.dart' ;
99
10- Future <FlutterLocalNotificationsPlugin ?> initNotifications () async {
10+ @pragma ('vm:entry-point' )
11+ Future <FlutterLocalNotificationsPlugin ?> initNotificationsBackground () async {
1112 // 基础设置
1213 const AndroidInitializationSettings initializationSettingsAndroid =
1314 AndroidInitializationSettings ('@mipmap/launcher_icon' ); // 应用图标
1415
15- final DarwinInitializationSettings initializationSettingsIOS =
16- DarwinInitializationSettings (
17- requestAlertPermission: false ,
18- requestBadgePermission: false ,
19- requestSoundPermission: false ,
20- );
21-
2216 final InitializationSettings initializationSettings = InitializationSettings (
2317 android: initializationSettingsAndroid,
24- iOS: initializationSettingsIOS,
2518 );
2619
2720 // 通知接口
2821 FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin ();
29-
30- await flutterLocalNotificationsPlugin.initialize (
31- initializationSettings,
32- onDidReceiveNotificationResponse: (NotificationResponse response) {
33- (response) {
34- return ;
35- };
36- },
37- );
22+ await flutterLocalNotificationsPlugin.initialize (initializationSettings);
3823
3924 // 通知渠道
4025 const AndroidNotificationChannel channel = AndroidNotificationChannel (
@@ -55,44 +40,44 @@ Future<FlutterLocalNotificationsPlugin?> initNotifications() async {
5540 return flutterLocalNotificationsPlugin;
5641}
5742
43+ @pragma ('vm:entry-point' )
44+ Future <bool > sendNotification () async {
45+ FlutterLocalNotificationsPlugin ? localNotificationPlugin = await initNotificationsBackground ();
46+ if (localNotificationPlugin == null ) return Future .value (false );
47+
48+ final SharedPreferences prefs = await SharedPreferences .getInstance ();
49+ final String ? configText = prefs.getString ("settingData" );
50+ if (configText == null ) return Future .value (false );
51+ final Config config = Config .buildFromMap (jsonDecode (configText));
52+
53+ // 如果当天连胜续了就不通知
54+ if (config.learning.lastDate == DateTime .now ().difference (DateTime (2025 , 11 , 1 )).inDays) return Future .value (true );
55+ // 起床前不通知
56+ if (DateTime .now ().hour < 7 ) return Future .value (true );
57+
58+ const androidDetails = AndroidNotificationDetails (
59+ 'learning_notification_channel' ,
60+ '学习通知' ,
61+ channelDescription: '用于学习提醒的后台通知' ,
62+ importance: Importance .high,
63+ priority: Priority .high,
64+ );
65+ const notificationDetails = NotificationDetails (android: androidDetails);
66+
67+ final Random rnd = Random ();
68+ await localNotificationPlugin.show (
69+ rnd.nextInt (9999 ),
70+ '学习提醒' ,
71+ StaticsVar .learningMessage[rnd.nextInt (StaticsVar .learningMessage.length)],
72+ notificationDetails,
73+ );
74+ return Future .value (true );
75+ }
76+
5877// 独立 Isolate 后台任务
78+ @pragma ('vm:entry-point' )
5979void callbackDispatcher () {
6080 Workmanager ().executeTask ((task, inputData) async {
6181 return await sendNotification ();
6282 });
63- }
64-
65- Future <bool > sendNotification () async {
66- FlutterLocalNotificationsPlugin ? localNotificationPlugin = await initNotifications ();
67- if (localNotificationPlugin == null ) return Future .value (false );
68-
69- final SharedPreferences prefs = await SharedPreferences .getInstance ();
70- final String ? configText = prefs.getString ("settingData" );
71- if (configText == null ) return Future .value (false );
72- final Config config = Config .buildFromMap (jsonDecode (configText));
73-
74- // 如果当天连胜续了就不通知
75- if (config.learning.lastDate == DateTime .now ().difference (DateTime (2025 , 11 , 1 )).inDays) return Future .value (true );
76- // 起床前不通知
77- if (DateTime .now ().hour < 7 ) return Future .value (true );
78-
79-
80- const androidDetails = AndroidNotificationDetails (
81- 'learning_notification_channel' ,
82- '学习通知' ,
83- channelDescription: '用于学习提醒的后台通知' ,
84- importance: Importance .high,
85- priority: Priority .high,
86- );
87- const notificationDetails = NotificationDetails (android: androidDetails);
88-
89- final Random rnd = Random ();
90- await localNotificationPlugin.show (
91- rnd.nextInt (9999 ),
92- '学习提醒' ,
93- StaticsVar .learningMessage[rnd.nextInt (StaticsVar .learningMessage.length)],
94- notificationDetails,
95- );
96-
97- return Future .value (true );
9883}
0 commit comments