onBeaconData method

  1. @override
dynamic onBeaconData(
  1. List<Beacon> beacons
)
override

Implementation

@override
onBeaconData(List<Beacon> beacons)
{
  // enabled?
  if (enabled == false) return;

  // if no beacons found on last
  // iteration and none in this,
  // just quit
  if (_beaconsFound == 0 && beacons.isEmpty) return _removeExpired();

  // rember last count of beacons found
  _beaconsFound = beacons.length;

  Log().debug('BEACON Scanner -> Found ${beacons.length} beacons');

  // remove beacons that dont match our criteria
  if (major != null || minor != null || distance != null) {
    beacons.removeWhere((element)
  {
    if (major    != null && element.major != major) return true;
    if (minor    != null && element.minor != minor) return true;
    if (distance != null && element.accuracy > distance!) return true;
    return false;
  });
  }

  // sort by distance
  if (beacons.length > 1) {
    beacons.sort((a, b) => Comparable.compare(a.accuracy, b.accuracy));
  }

  Log().debug('BEACON Scanner -> ${beacons.length} beacons matching your criteria');

  // Build the Data
  Data data = Data();
  for (var beacon in beacons) {
    // calculate age
    int age = 0;
    if (beacon.macAddress != null)
    {
      var dt = DateTime.now().millisecondsSinceEpoch;
      if (!firstSeen.keys.contains(beacon.macAddress!)) firstSeen[beacon.macAddress!] = dt;
      lastSeen[beacon.macAddress!] = dt;
      age = lastSeen[beacon.macAddress!]! - firstSeen[beacon.macAddress!]!;
    }

    Map<dynamic, dynamic> map = <dynamic, dynamic>{};
    map["id"]         = beacon.proximityUUID;
    map["epoch"]      = "${DateTime.now().millisecondsSinceEpoch}";
    map["age"]        = "$age";
    map["macaddress"] = beacon.macAddress;
    map["rssi"]       = "${beacon.rssi}";
    map["power"]      = "${beacon.txPower ?? 0.0}";
    map["minor"]      = "${beacon.minor}";
    map["major"]      = "${beacon.major}";
    map["distance"]   = "${beacon.accuracy}";
    map["proximity"]  = "${beacon.proximity}";
    data.add(map);
  }

  // remove any items that haven't been seen in the past 15 seconds
  _removeExpired();

  // Notify
  onSuccess(data);
}