### Initialize Flutter Beacon Library Source: https://github.com/alann-maulana/flutter_beacon/blob/master/example/README.md Initializes the flutter_beacon library. This is a prerequisite for using other library functionalities. It handles potential platform-specific initialization errors via PlatformException. ```dart try { await flutterBeacon.initializeScanning; } on PlatformException catch(e) { // library failed to initialize, check code and message } ``` -------------------------------- ### Install Flutter Beacon Plugin Source: https://github.com/alann-maulana/flutter_beacon/blob/master/README.md Add the flutter_beacon dependency to your pubspec.yaml file to include the library in your Flutter project. This is the initial step for using any of its features. ```yaml dependencies: flutter_beacon: latest ``` -------------------------------- ### Monitor Beacons with Flutter Beacon (Dart) Source: https://github.com/alann-maulana/flutter_beacon/blob/master/README.md This code snippet demonstrates how to set up and start monitoring beacons using the Flutter Beacon plugin. It includes platform-specific region configurations for iOS and Android, and shows how to listen to monitoring results and cancel the stream. Dependencies include the 'flutter_beacon' package and 'dart:io' for platform detection. ```dart final regions = []; if (Platform.isIOS) { // iOS platform, at least set identifier and proximityUUID for region scanning regions.add(Region( identifier: 'Apple Airlocate', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0')); } else { // Android platform, it can ranging out of beacon that filter all of Proximity UUID regions.add(Region(identifier: 'com.beacon')); } // to start monitoring beacons _streamMonitoring = flutterBeacon.monitoring(regions).listen((MonitoringResult result) { // result contains a region, event type and event state }); // to stop monitoring beacons _streamMonitoring.cancel(); ``` -------------------------------- ### Monitor Beacons (iOS and Android) Source: https://github.com/alann-maulana/flutter_beacon/blob/master/example/README.md Starts monitoring for beacons entering or exiting a specified region. Similar to ranging, it allows for platform-specific region configurations and uses a stream for event handling. The monitoring can be stopped by canceling the stream subscription. ```dart final regions = []; if (Platform.isIOS) { regions.add(Region( identifier: 'Apple Airlocate', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0')); } else { // android platform, it can ranging out of beacon that filter all of Proximity UUID regions.add(Region(identifier: 'com.beacon')); } // to start monitoring beacons _streamMonitoring = flutterBeacon.monitoring(regions).listen((MonitoringResult result) { // result contains a region, event type and event state }); // to stop monitoring beacons _streamMonitoring.cancel(); ``` -------------------------------- ### Range Beacons (iOS and Android) Source: https://github.com/alann-maulana/flutter_beacon/blob/master/example/README.md Starts ranging for beacons within a specified region. Supports different region configurations for iOS and Android. The ranging process is managed via a stream, which can be stopped by canceling the subscription. ```dart final regions = []; if (Platform.isIOS) { regions.add(Region( identifier: 'Apple Airlocate', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0')); } else { // android platform, it can ranging out of beacon that filter all of Proximity UUID regions.add(Region(identifier: 'com.beacon')); } // to start ranging beacons _streamRanging = flutterBeacon.ranging(regions).listen((RangingResult result) { // result contains a region and list of beacons found // list can be empty if no matching beacons were found in range }); // to stop ranging beacons _streamRanging.cancel(); ``` -------------------------------- ### Check Bluetooth State - Flutter Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This example shows how to monitor Bluetooth state changes and retrieve the current state. It's crucial for ensuring beacon functionality. The code checks the current state, provides comments on possible states, and includes functions to listen for state changes and stop listening. It requires the flutter_beacon package. ```dart import 'dart:async'; import 'package:flutter_beacon/flutter_beacon.dart'; StreamSubscription? _bluetoothSubscription; Future checkBluetoothState() async { // Get current state BluetoothState state = await flutterBeacon.bluetoothState; print('Current bluetooth state: $state'); // Possible states: // BluetoothState.stateOn - Bluetooth is on // BluetoothState.stateOff - Bluetooth is off // BluetoothState.stateTurningOn - Bluetooth is turning on (Android only) // BluetoothState.stateTurningOff - Bluetooth is turning off (Android only) // BluetoothState.stateUnknown - State unknown // BluetoothState.stateResetting - Bluetooth is resetting (iOS only) // BluetoothState.stateUnsupported - Bluetooth not supported // BluetoothState.stateUnauthorized - Bluetooth unauthorized (iOS only) if (state == BluetoothState.stateOn) { print('Bluetooth is ready'); } else if (state == BluetoothState.stateOff) { print('Please enable Bluetooth'); } } void listenToBluetoothChanges() { _bluetoothSubscription = flutterBeacon.bluetoothStateChanged().listen((BluetoothState state) { print('Bluetooth state changed: $state'); if (state == BluetoothState.stateOn) { // Bluetooth enabled, start scanning } else { // Bluetooth disabled, stop scanning } }); } void stopListening() { _bluetoothSubscription?.cancel(); } ``` -------------------------------- ### Start and Stop Ranging Beacons in Flutter Source: https://github.com/alann-maulana/flutter_beacon/blob/master/README.md Configure regions for scanning and start ranging beacons using the ranging API. The stream subscription begins scanning, and calling cancel() on the subscription stops it. Platform-specific region configurations are supported. ```dart final regions = []; if (Platform.isIOS) { // iOS platform, at least set identifier and proximityUUID for region scanning regions.add(Region( identifier: 'Apple Airlocate', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0')); } else { // android platform, it can ranging out of beacon that filter all of Proximity UUID regions.add(Region(identifier: 'com.beacon')); } // to start ranging beacons _streamRanging = flutterBeacon.ranging(regions).listen((RangingResult result) { // result contains a region and list of beacons found // list can be empty if no matching beacons were found in range }); // to stop ranging beacons _streamRanging.cancel(); ``` -------------------------------- ### Android Permissions Setup for Flutter Beacon Source: https://github.com/alann-maulana/flutter_beacon/blob/master/README.md For Android target SDK versions 29 and above, you need to manually declare ACCESS_FINE_LOCATION in your AndroidManifest.xml. If background scanning is required, also add ACCESS_BACKGROUND_LOCATION. ```xml ``` -------------------------------- ### Start Ranging Nearby Beacons in Dart Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt Begin ranging for nearby iBeacons to receive continuous updates with distance information. This Dart code sets up a stream to listen for `RangingResult` objects, which contain details about detected beacons like UUID, major, minor, accuracy, RSSI, and proximity. ```dart import 'dart:async'; import 'dart:io'; import 'package:flutter_beacon/flutter_beacon.dart'; StreamSubscription? _streamRanging; final _beacons = []; Future startRanging() async { await flutterBeacon.initializeAndCheckScanning; final regions = []; if (Platform.isIOS) { // iOS requires proximityUUID regions.add(Region( identifier: 'Apple Airlocate', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0', )); } else { // Android can scan all beacons without specifying UUID regions.add(Region(identifier: 'com.beacon')); } // Start ranging and listen to results _streamRanging = flutterBeacon.ranging(regions).listen((RangingResult result) { // result.region - the region being scanned // result.beacons - list of detected beacons _beacons.clear(); _beacons.addAll(result.beacons); for (var beacon in result.beacons) { print('UUID: ${beacon.proximityUUID}'); print('Major: ${beacon.major}, Minor: ${beacon.minor}'); print('Distance: ${beacon.accuracy}m'); print('RSSI: ${beacon.rssi}'); print('Proximity: ${beacon.proximity}'); // unknown, immediate, near, far } }); } void stopRanging() { _streamRanging?.cancel(); } void pauseRanging() { _streamRanging?.pause(); } void resumeRanging() { _streamRanging?.resume(); } ``` -------------------------------- ### Initialize Flutter Beacon Scanning Source: https://github.com/alann-maulana/flutter_beacon/blob/master/README.md Initialize the Flutter Beacon library. You can choose to manually check permissions or use the combined initializeAndCheckScanning method for automatic permission handling. Handle potential PlatformExceptions during initialization. ```dart try { // if you want to manage manual checking about the required permissions await flutterBeacon.initializeScanning; // or if you want to include automatic checking permission await flutterBeacon.initializeAndCheckScanning; } on PlatformException catch(e) { // library failed to initialize, check code and message } ``` -------------------------------- ### Broadcast as iBeacon - Flutter Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This code demonstrates how to make a device broadcast itself as an iBeacon. It checks for broadcast support, initializes scanning, configures broadcast parameters (identifier, UUID, major, minor, txPower, and Android-specific settings), and starts/stops broadcasting. It requires the flutter_beacon package. ```dart import 'package:flutter_beacon/flutter_beacon.dart'; Future startBroadcasting() async { // Check if device supports broadcasting bool supported = await flutterBeacon.isBroadcastSupported(); if (!supported) { print('Beacon broadcasting not supported on this device'); return; } await flutterBeacon.initializeScanning; // Configure broadcast parameters final beaconBroadcast = BeaconBroadcast( identifier: 'com.myApp.beacon', // Required for iOS proximityUUID: 'CB10023F-A318-3394-4199-A8730C7C1AEC', major: 1, minor: 100, txPower: -59, // Optional, uses device default if null // Android-specific settings advertisingMode: AdvertisingMode.low, // low, mid, high advertisingTxPowerLevel: AdvertisingTxPowerLevel.high, // ultraLow, low, mid, high ); await flutterBeacon.startBroadcast(beaconBroadcast); print('Broadcasting started'); } Future stopBroadcasting() async { await flutterBeacon.stopBroadcast(); print('Broadcasting stopped'); } Future checkBroadcastStatus() async { bool isBroadcasting = await flutterBeacon.isBroadcasting(); print('Is broadcasting: $isBroadcasting'); } ``` -------------------------------- ### Initialize Beacon Scanning API in Dart Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt Initialize the beacon scanning API in your Flutter application. Use `initializeAndCheckScanning` for automatic permission handling or `initializeScanning` for manual control. This function prepares the plugin for detecting beacons. ```dart import 'package:flutter_beacon/flutter_beacon.dart'; // Initialize with automatic permission checking (recommended) Future initializeBeacon() async { try { // This will check bluetooth, location permissions, and location services bool success = await flutterBeacon.initializeAndCheckScanning; print('Beacon scanning initialized: $success'); } on PlatformException catch (e) { print('Failed to initialize: ${e.code} - ${e.message}'); } } // Or initialize manually without automatic permission checks Future initializeManually() async { try { bool success = await flutterBeacon.initializeScanning; print('Beacon scanning initialized: $success'); } on PlatformException catch (e) { print('Failed to initialize: ${e.code} - ${e.message}'); } } ``` -------------------------------- ### Open System Settings Dialogs in Dart Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This snippet provides functions to open specific system settings dialogs. It includes opening Bluetooth settings on Android, location settings on Android, and application-specific settings on iOS. Note that direct programmatic access to Bluetooth settings on iOS is not supported. Dependencies: 'dart:io' and 'package:flutter_beacon/flutter_beacon.dart'. ```dart import 'dart:io'; import 'package:flutter_beacon/flutter_beacon.dart'; Future openBluetoothSettings() async { if (Platform.isAndroid) { // Opens Bluetooth settings on Android bool opened = await flutterBeacon.openBluetoothSettings; print('Bluetooth settings opened: $opened'); } else { // iOS cannot open Bluetooth settings programmatically print('Please enable Bluetooth in Settings'); } } Future openLocationSettings() async { if (Platform.isAndroid) { bool opened = await flutterBeacon.openLocationSettings; print('Location settings opened: $opened'); } } Future openAppSettings() async { if (Platform.isIOS) { // Opens app-specific settings on iOS bool opened = await flutterBeacon.openApplicationSettings; print('App settings opened: $opened'); } } ``` -------------------------------- ### Flutter Beacon Scanner App Implementation Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This Dart code implements a complete Flutter application for scanning Bluetooth beacons. It handles initialization, Bluetooth state changes, permission requests, and ranging results. Dependencies include flutter/material, flutter/services, and flutter_beacon. ```dart import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_beacon/flutter_beacon.dart'; class BeaconScannerApp extends StatefulWidget { @override _BeaconScannerAppState createState() => _BeaconScannerAppState(); } class _BeaconScannerAppState extends State { StreamSubscription? _rangingSubscription; StreamSubscription? _bluetoothSubscription; final List _beacons = []; bool _isScanning = false; String _status = 'Initializing...'; @override void initState() { super.initState(); _initializeBeacon(); } Future _initializeBeacon() async { try { // Listen to bluetooth state changes _bluetoothSubscription = flutterBeacon.bluetoothStateChanged().listen((state) { if (state == BluetoothState.stateOn && !_isScanning) { _startScanning(); } else if (state != BluetoothState.stateOn) { _stopScanning(); setState(() => _status = 'Bluetooth is off'); } }); // Initialize with automatic permission checking bool success = await flutterBeacon.initializeAndCheckScanning; if (success) { _startScanning(); } else { setState(() => _status = 'Failed to initialize'); } } on PlatformException catch (e) { setState(() => _status = 'Error: ${e.message}'); } } Future _startScanning() async { // Check requirements final bluetoothState = await flutterBeacon.bluetoothState; final authStatus = await flutterBeacon.authorizationStatus; final locationEnabled = await flutterBeacon.checkLocationServicesIfEnabled; if (bluetoothState != BluetoothState.stateOn) { setState(() => _status = 'Please enable Bluetooth'); return; } if (authStatus != AuthorizationStatus.allowed && authStatus != AuthorizationStatus.always && authStatus != AuthorizationStatus.whenInUse) { await flutterBeacon.requestAuthorization; return; } if (!locationEnabled) { setState(() => _status = 'Please enable Location Services'); return; } // Configure regions final regions = [ if (Platform.isIOS) Region( identifier: 'MyRegion', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0', ) else Region(identifier: 'AllBeacons'), ]; // Start ranging setState(() { _isScanning = true; _status = 'Scanning...'; }); _rangingSubscription = flutterBeacon.ranging(regions).listen( (RangingResult result) { setState(() { _beacons.clear(); _beacons.addAll(result.beacons); _beacons.sort((a, b) => a.accuracy.compareTo(b.accuracy)); }); }, onError: (error) { setState(() => _status = 'Ranging error: $error'); }, ); } void _stopScanning() { _rangingSubscription?.cancel(); setState(() { _isScanning = false; _beacons.clear(); }); } @override void dispose() { _rangingSubscription?.cancel(); _bluetoothSubscription?.cancel(); flutterBeacon.close; super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Beacon Scanner')), body: _beacons.isEmpty ? Center(child: Text(_status)) : ListView.builder( itemCount: _beacons.length, itemBuilder: (context, index) { final beacon = _beacons[index]; return ListTile( title: Text(beacon.proximityUUID), subtitle: Text( 'Major: ${beacon.major} | Minor: ${beacon.minor}\n' 'Distance: ${beacon.accuracy.toStringAsFixed(2)}m | ' 'RSSI: ${beacon.rssi} | ${beacon.proximity}', ), isThreeLine: true, ); }, ), ); } } ``` -------------------------------- ### Check and Monitor Authorization Status in Dart Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This snippet demonstrates how to check the current location authorization status and listen for changes. It handles requesting authorization if not determined and provides feedback on whether scanning can proceed. Dependencies include 'dart:async' and 'package:flutter_beacon/flutter_beacon.dart'. ```dart import 'dart:async'; import 'package:flutter_beacon/flutter_beacon.dart'; StreamSubscription? _authSubscription; Future checkAuthorizationStatus() async { AuthorizationStatus status = await flutterBeacon.authorizationStatus; print('Authorization status: $status'); // Android statuses: allowed, denied, notDetermined // iOS statuses: always, whenInUse, denied, restricted, notDetermined if (status == AuthorizationStatus.allowed || status == AuthorizationStatus.always) { print('Location authorized - ready to scan'); } else if (status == AuthorizationStatus.notDetermined) { // Request authorization bool granted = await flutterBeacon.requestAuthorization; print('Authorization granted: $granted'); } else { print('Location access denied'); } } Future setAuthorizationType() async { // iOS only: Set default authorization type before initializing // Must be called before initializeScanning or authorizationStatus await flutterBeacon.setLocationAuthorizationTypeDefault(AuthorizationStatus.whenInUse); // Or for background scanning: // await flutterBeacon.setLocationAuthorizationTypeDefault(AuthorizationStatus.always); } void listenToAuthorizationChanges() { _authSubscription = flutterBeacon.authorizationStatusChanged().listen((AuthorizationStatus status) { print('Authorization status changed: $status'); }); } ``` -------------------------------- ### iOS Info.plist Permissions for Flutter Beacon Source: https://github.com/alann-maulana/flutter_beacon/blob/master/README.md Configure your iOS Info.plist file to declare the necessary location and Bluetooth permissions. This includes descriptions for 'When in use', 'Always', and Bluetooth access, especially for iOS 13+. ```xml NSLocationWhenInUseUsageDescription Reason why app needs location NSLocationAlwaysAndWhenInUseUsageDescription Reason why app needs location NSLocationAlwaysUsageDescription Reason why app needs location NSBluetoothAlwaysUsageDescription Reason why app needs bluetooth ``` -------------------------------- ### Monitor Beacon Regions - Flutter Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This snippet shows how to monitor beacon regions to receive enter/exit events. It initializes the beacon scanner, defines regions (platform-specific for iOS), and listens for monitoring events like didEnterRegion, didExitRegion, and didDetermineStateForRegion. It requires the flutter_beacon package. ```dart import 'dart:async'; import 'dart:io'; import 'package:flutter_beacon/flutter_beacon.dart'; StreamSubscription? _streamMonitoring; Future startMonitoring() async { await flutterBeacon.initializeAndCheckScanning; final regions = []; if (Platform.isIOS) { regions.add(Region( identifier: 'Apple Airlocate', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0', )); } else { regions.add(Region(identifier: 'com.beacon')); } _streamMonitoring = flutterBeacon.monitoring(regions).listen((MonitoringResult result) { // Event types: didEnterRegion, didExitRegion, didDetermineStateForRegion print('Event: ${result.monitoringEventType}'); print('Region: ${result.region.identifier}'); // State is available for didDetermineStateForRegion events // States: inside, outside, unknown if (result.monitoringState != null) { print('State: ${result.monitoringState}'); } switch (result.monitoringEventType) { case MonitoringEventType.didEnterRegion: print('Entered region: ${result.region.identifier}'); break; case MonitoringEventType.didExitRegion: print('Exited region: ${result.region.identifier}'); break; case MonitoringEventType.didDetermineStateForRegion: print('Region state: ${result.monitoringState}'); break; } }); } void stopMonitoring() { _streamMonitoring?.cancel(); } ``` -------------------------------- ### Configure Scan Periods for Android in Dart Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This Dart code configures the scan periods for beacon detection specifically on Android devices. It allows customization of the scan interval and the pause between scans to balance battery consumption and detection responsiveness. The default values are mentioned for reference. Requires 'package:flutter_beacon/flutter_beacon.dart'. ```dart import 'package:flutter_beacon/flutter_beacon.dart'; Future configureScanPeriods() async { // Set scan period (how long to scan each cycle) in milliseconds // Default is typically 1100ms await flutterBeacon.setScanPeriod(2000); // Scan for 2 seconds // Set between scan period (pause between scans) in milliseconds // Default is typically 0ms await flutterBeacon.setBetweenScanPeriod(500); // Wait 500ms between scans // For background scanning, use longer periods to save battery: // await flutterBeacon.setScanPeriod(5000); // await flutterBeacon.setBetweenScanPeriod(25000); } ``` -------------------------------- ### Configure Beacon Regions for Filtering in Dart Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This function defines and returns a list of Region objects used for filtering beacon detection. It differentiates configuration between iOS and Android: iOS requires a proximityUUID, while Android can scan all beacons or filter by UUID. This snippet requires 'dart:io' and 'package:flutter_beacon/flutter_beacon.dart'. ```dart import 'dart:io'; import 'package:flutter_beacon/flutter_beacon.dart'; List configureRegions() { final regions = []; if (Platform.isIOS) { // iOS: Must specify proximityUUID regions.add(Region( identifier: 'MyBeaconRegion', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0', )); // Can also filter by major/minor regions.add(Region( identifier: 'SpecificBeacon', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0', major: 1, minor: 100, )); } else { // Android: Can scan all beacons without UUID regions.add(Region(identifier: 'AllBeacons')); // Or filter by specific UUID regions.add(Region( identifier: 'FilteredBeacons', proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0', )); } return regions; } ``` -------------------------------- ### Check Location Services Status in Dart Source: https://context7.com/alann-maulana/flutter_beacon/llms.txt This code checks if location services are enabled on the device. If not enabled, it attempts to open the location settings on Android. For iOS, it prints a message instructing the user to enable services manually. It requires 'dart:io' and 'package:flutter_beacon/flutter_beacon.dart'. ```dart import 'dart:io'; import 'package:flutter_beacon/flutter_beacon.dart'; Future checkLocationServices() async { bool enabled = await flutterBeacon.checkLocationServicesIfEnabled; print('Location services enabled: $enabled'); if (!enabled) { if (Platform.isAndroid) { // Open location settings on Android await flutterBeacon.openLocationSettings; } else { // iOS cannot open settings programmatically // Show dialog instructing user to enable location print('Please enable Location Services in Settings > Privacy > Location Services'); } } } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.