locationDataUpdated static method

Future<void> locationDataUpdated(
  1. double latitude,
  2. double longitude
)

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,
  ));
}