pub package

This plugin is developed to scan nearby iBeacons on both Android iOS. This library makes it easier to scan & range nearby BLE beacons and read their proximity values.


For Android change min SDK version:

defaultConfig {
  minSdkVersion 19

Change your Android Project's MainActivity class to following:

import com.umair.beacons_plugin.BeaconsPlugin

class MainActivity : FlutterActivity(){

    override fun onPause() {

        //Start Background service to scan BLE devices

    override fun onResume() {

        //Stop Background service, app is in foreground

That's it for Android.


In your AppDelegate.swift file change it to like this:

    import UIKit
    import Flutter
    import CoreLocation
    @objc class AppDelegate: FlutterAppDelegate {
        let locationManager = CLLocationManager()
        override func application(
            _ application: UIApplication,
            didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
        ) -> Bool {
            GeneratedPluginRegistrant.register(with: self)
            return super.application(application, didFinishLaunchingWithOptions: launchOptions)

In your Info.plist file add following lines:

    	<string>App needs location permissions to scan nearby beacons.</string>
    	<string>App needs location permissions to scan nearby beacons.</string>
    	<string>App needs location permissions to scan nearby beacons.</string>


In your pubspec.yaml

  beacons_plugin: [LATEST_VERSION]
import 'dart:async';
import 'dart:io' show Platform;
import 'package:flutter/services.dart';
import 'package:beacons_plugin/beacons_plugin.dart';

Ranging Beacons & Setting Up

    // if you need to monitor also major and minor use the original version and not this fork
    BeaconsPlugin.addRegion("myBeacon", "01022022-f88f-0000-00ae-9605fd9bb620")
        .then((result) {
    //Send 'true' to run in background [OPTIONAL]
    await BeaconsPlugin.runInBackground(true);
    //IMPORTANT: Start monitoring once scanner is setup & ready (only for Android)
    if (Platform.isAndroid) { async {
        if (call.method == 'scannerReady') {
          await BeaconsPlugin.startMonitoring();
    } else if (Platform.isIOS) {
      await BeaconsPlugin.startMonitoring();

Listen To Beacon Scan Results as Stream

    final StreamController<String> beaconEventsController = StreamController<String>.broadcast();
        (data) {
          if (data.isNotEmpty) {
            setState(() {
              _beaconResult = data;
            print("Beacons DataReceived: " + data);
        onDone: () {},
        onError: (error) {
          print("Error: $error");

Stop Listening to Beacons

     await BeaconsPlugin.stopMonitoring();

Run in Background

    //Send 'true' to run in background
     await BeaconsPlugin.runInBackground(true);

Clear Regions

    await BeaconsPlugin.clearRegions();

Add custom beacons layout (AltBeacon)


Add custom Foreground scan periods (AltBeacon)

            foregroundScanPeriod: 2200, foregroundBetweenScanPeriod: 10);

Add custom Background scan periods (AltBeacon)

            backgroundScanPeriod: 2200, backgroundBetweenScanPeriod: 10);

Set the level of debug messages

    //Valid values: 0 = no messages, 1 = errors, 2 = all messages
    await BeaconsPlugin.setDebugLevel(int value);

Set Prominent Disclosure message (Android 10)

See: Link

    if (Platform.isAndroid) {
      //Prominent disclosure
      await BeaconsPlugin.setDisclosureDialogMessage(
          title: "Need Location Permission",
          message: "This app collects location data to work with beacons.");

      //Only in case, you want the dialog to be shown again. By Default, dialog will never be shown if permissions are granted.
      await BeaconsPlugin.clearDisclosureDialogShowFlag(false);
    } async {
        if (call.method == 'isPermissionDialogShown') {
          //Do something here

Scan Results

Data Android iOS
name Yes Yes
uuid Yes Yes
major Yes Yes
minor Yes Yes
distance Yes Yes
proximity Yes Yes
rssi Yes Yes
macAddress Yes No
txPower Yes No

Native Libraries


Flutter Beacons plugin is developed by Umair Adil. You can email me at for any queries.