onStart method
override
Called when the task is started.
Implementation
@override
Future<void> onStart(DateTime timestamp, SendPort? sendPort) async {
debugPrint("[DEBUG] TaskHandler.onStart called at $timestamp");
_sendPort = sendPort;
// Check location permission
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
debugPrint("[ERROR] Location services are disabled at $timestamp");
_sendPort?.send("Location services are disabled");
return;
}
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
debugPrint("[ERROR] Location permission denied at $timestamp");
_sendPort?.send("Location permission denied");
return;
}
if (permission == LocationPermission.deniedForever) {
debugPrint("[ERROR] Location permissions permanently denied at $timestamp");
_sendPort?.send("Location permissions permanently denied");
return;
}
// Start continuous location updates
_positionSubscription = Geolocator.getPositionStream(
locationSettings: const LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 5, // Update every 5 meters
),
).listen(
(Position position) {
// Send the position to the main isolate
_sendPort?.send(position);
debugPrint("[DEBUG] Location update in isolate: ${position.latitude}, ${position.longitude} at ${DateTime.now()}");
},
onError: (error) {
debugPrint("[ERROR] Location stream error in isolate: $error at ${DateTime.now()}");
_sendPort?.send("Location stream error: $error");
},
);
// Send initial status message
_sendPort?.send("Foreground location tracking started");
}