locationDataUpdated static method
Function called when new location data is available. It checks the saved messages and tells all the MBLocationTrigger` triggers that this tag has changed. @param latitude The new latitude. @param longitude The new longitude.
Implementation
static Future<void> locationDataUpdated(
double latitude,
double longitude,
) async {
List<MBMessage>? messagesSaved = await savedMessages();
if (messagesSaved == null) {
return;
}
if (messagesSaved.isEmpty) {
return;
}
_Location? lastLocation = await _lastLocation();
bool somethingChanged = false;
for (MBMessage message in messagesSaved) {
if (message.triggers is MBMessageTriggers) {
MBMessageTriggers messageTriggers = message.triggers;
List<MBLocationTrigger> locationTriggers =
List.castFrom<MBTrigger, MBLocationTrigger>(
messageTriggers.triggers.whereType<MBLocationTrigger>().toList(),
);
for (MBLocationTrigger locationTrigger in locationTriggers) {
bool triggerChanged = locationTrigger.locationDataUpdated(
latitude: latitude,
longitude: longitude,
lastLatitude: lastLocation?.latitude,
lastLongitude: lastLocation?.longitude,
);
if (triggerChanged) {
somethingChanged = true;
}
}
}
}
if (somethingChanged) {
await saveMessages(
messagesSaved,
fromFetch: false,
);
}
checkMessages(fromStartup: false);
await _saveLocationAsLast(_Location(
latitude,
longitude,
));
}