From 7051bb5271368d34f753bd878ada1ab372de0918 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 1 Jul 2025 11:32:51 -0700 Subject: [PATCH] Add command and fix entry --- lib/push_service.dart | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/push_service.dart b/lib/push_service.dart index f27dfd6..99c6197 100644 --- a/lib/push_service.dart +++ b/lib/push_service.dart @@ -6,10 +6,16 @@ import 'package:flutter_background_geolocation/flutter_background_geolocation.da import 'preferences.dart'; +@pragma('vm:entry-point') +Future pushServiceBackgroundHandler(RemoteMessage message) async { + await Preferences.init(); + await PushService._onMessage(message); +} + class PushService { static Future init() async { await FirebaseMessaging.instance.requestPermission(); - FirebaseMessaging.onBackgroundMessage(_backgroundHandler); + FirebaseMessaging.onBackgroundMessage(pushServiceBackgroundHandler); FirebaseMessaging.onMessage.listen(_onMessage); FirebaseMessaging.instance.onTokenRefresh.listen(_uploadToken); bg.BackgroundGeolocation.onEnabledChange((enabled) async { @@ -19,20 +25,19 @@ class PushService { }); } - @pragma('vm:entry-point') - static Future _backgroundHandler(RemoteMessage message) async { - await Preferences.init(); - await _onMessage(message); - } - static Future _onMessage(RemoteMessage message) async { final command = message.data['command']; - if (command == 'positionSingle') { - try { - await bg.BackgroundGeolocation.getCurrentPosition(samples: 1, persist: true, extras: {'remote': true}); - } catch (error) { - developer.log('Failed to get position', error: error); - } + switch (command) { + case 'positionSingle': + try { + await bg.BackgroundGeolocation.getCurrentPosition(samples: 1, persist: true, extras: {'remote': true}); + } catch (error) { + developer.log('Failed to get position', error: error); + } + case 'positionPeriodic': + await bg.BackgroundGeolocation.start(); + case 'positionStop': + await bg.BackgroundGeolocation.stop(); } }