collectLocationAudit static method

Future<void> collectLocationAudit({
  1. required ACLDatabase db,
  2. Position? position,
})

Implementation

static Future<void> collectLocationAudit(
    {required ACLDatabase db, Position? position}) async {
  try {
    if (position == null) {
      final permission = await Geolocator.checkPermission();
      if (permission != LocationPermission.always) {
        return;
      }
      position = await Geolocator.getCurrentPosition(
          locationSettings: LocationAuditHelper.generateLocationSettings());
    }

    final latestRecord = await db.locationAuditDao.findLatest();
    double distance = 0;
    if (latestRecord != null) {
      distance = latestRecord.distance;
      final moveDistance = Geolocator.distanceBetween(latestRecord.lat,
          latestRecord.long, position.latitude, position.longitude);

      if (moveDistance > 5 || position.speed > 0.1) {
        distance += moveDistance;
      }
    }

    await db.locationAuditDao.create(LocationAuditCompanion(
      accuracy: Value(position.accuracy),
      altitude: Value(position.altitude),
      lat: Value(position.latitude),
      long: Value(position.longitude),
      speed: Value(position.speed),
      distance: Value(distance),
      createdAt: Value(DateTime.now()),
    ));
  } catch (e) {
    print('Error: LocationAuditHelper.collectLocationAudit');
    print(e);
  }
}