beacons_plugin 1.0.20
beacons_plugin: ^1.0.20 copied to clipboard
This plugin makes it easier to scan nearby iBeacons and range them in flutter app. Scaned beacons will provide proximity values.
import 'dart:async';
import 'dart:io' show Platform;
import 'package:beacons_plugin/beacons_plugin.dart';
import 'package:flutter/material.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _beaconResult = 'Not Scanned Yet.';
int _nrMessaggesReceived = 0;
var isRunning = false;
final StreamController<String> beaconEventsController =
StreamController<String>.broadcast();
@override
void initState() {
super.initState();
initPlatformState();
}
@override
void dispose() {
beaconEventsController.close();
super.dispose();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {
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);
}
BeaconsPlugin.listenToBeacons(beaconEventsController);
await BeaconsPlugin.addRegion(
"BeaconType1", "909c3cf9-fc5c-4841-b695-380958a51a5a");
await BeaconsPlugin.addRegion(
"BeaconType2", "6a84c716-0f2a-1ce9-f210-6a63bd873dd9");
beaconEventsController.stream.listen(
(data) {
if (data.isNotEmpty) {
setState(() {
_beaconResult = data;
_nrMessaggesReceived++;
});
print("Beacons DataReceived: " + data);
}
},
onDone: () {},
onError: (error) {
print("Error: $error");
});
//Send 'true' to run in background
await BeaconsPlugin.runInBackground(true);
if (Platform.isAndroid) {
BeaconsPlugin.channel.setMethodCallHandler((call) async {
if (call.method == 'scannerReady') {
await BeaconsPlugin.startMonitoring;
setState(() {
isRunning = true;
});
}
});
} else if (Platform.isIOS) {
await BeaconsPlugin.startMonitoring;
setState(() {
isRunning = true;
});
}
if (!mounted) return;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Monitoring Beacons'),
),
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('$_beaconResult'),
Padding(
padding: EdgeInsets.all(10.0),
),
Text('$_nrMessaggesReceived'),
SizedBox(
height: 20.0,
),
Visibility(
visible: isRunning,
child: RaisedButton(
onPressed: () async {
if (Platform.isAndroid) {
await BeaconsPlugin.stopMonitoring;
setState(() {
isRunning = false;
});
}
},
child: Text('Stop Scanning', style: TextStyle(fontSize: 20)),
),
),
SizedBox(
height: 20.0,
),
Visibility(
visible: !isRunning,
child: RaisedButton(
onPressed: () async {
initPlatformState();
await BeaconsPlugin.startMonitoring;
setState(() {
isRunning = true;
});
},
child: Text('Start Scanning', style: TextStyle(fontSize: 20)),
),
)
],
),
),
),
);
}
}