alann-maulana / flutter_beacon

An hybrid iBeacon scanner and transmitter SDK for Flutter Android and iOS.
Apache License 2.0
116 stars 142 forks source link

No MonitoringResult updates on iOS when beacon is not in range #92

Open ksheremet opened 3 years ago

ksheremet commented 3 years ago
_streamMonitoring = flutterBeacon.monitoring(regions).listen((MonitoringResult result) {
  // result contains a region, event type and event state
});

flutter_beacon: ^0.4.0

The app is in the foreground.

Android works well.

alann-maulana commented 3 years ago

Hi @ksheremet

Which iOS device and version do you use as tester device?

ksheremet commented 3 years ago

@alann-maulana

iPhone 7, version iOS 14.4.2

Ahmadre commented 2 years ago

@alann-maulana any updates yet?

Same is happening to me:

iOS 14 Iphone 11 Pro

Ahmadre commented 2 years ago

Update: it's working now perfectly on iOS 14.7.1 :)

It was just my fault. Monitoring is fast and detects directly outside and inside. Good job @alann-maulana 👍🏼

Here's my version @ksheremet :

  final regions = <Region>[];
  final monitoringResults = <MonitoringResult>[];
  StreamSubscription<MonitoringResult>? _streamRanging;

  [...]

  void initBeaconRanger() async {
    regions.addAll([
      Region(identifier: 'Feasycom', proximityUUID: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'),
    ]);
    _streamRanging = flutterBeacon
        .monitoring(regions)
        .asBroadcastStream()
        .listen((MonitoringResult result) {
      debugPrint(result.region.toString());
      debugPrint(result.monitoringState.toString());
      if (!monitoringResults.any((mon) => mon.region == result.region) &&
          result.monitoringState == MonitoringState.inside) {
        monitoringResults.add(result);
      } else {
        monitoringResults.removeWhere((m) => m.region == result.region);
      }
      setState(() {});
    });
    setState(() {});
  }