mt_beacon_plus 0.0.3
mt_beacon_plus: ^0.0.3 copied to clipboard
Plugin per la gestione dei beacon
example/lib/main.dart
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:io';
import 'dart:convert';
import 'package:geolocator/geolocator.dart';
import 'package:flutter/services.dart';
import 'package:mt_beacon_plus/mt_beacon_plus.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
String _devicesList = 'Unknown';
String _currentPosition = 'Unknown'; // Variabile per la posizione corrente
final _mtBeaconPlusPlugin = MtBeaconPlus();
Timer? _timer;
StreamSubscription<Position>? _positionStreamSubscription;
late WebSocket _webSocket;
String _message = 'Nessun messaggio ricevuto';
bool _showResetButton = false;
@override
void initState() {
super.initState();
_checkLocationPermission();
_startPositionStream(); // Inizia a monitorare la posizione
initPlatformState();
startBackgroundScanning();
_updateBeaconScanWithNewPosition(); // Inizia la scansione con la posizione attuale
}
void startBackgroundScanning() {
_timer = Timer.periodic(Duration(seconds: 300), (timer) {
_updateBeaconScanWithNewPosition();
});
}
@override
void dispose() {
_positionStreamSubscription?.cancel(); // Annulla l'abbonamento al flusso di posizione
_webSocket.close(); // Chiudi la connessione WebSocket
_timer?.cancel();
super.dispose();
}
void _resetMessage() {
setState(() {
_message = 'Nessun messaggio ricevuto';
_showResetButton = false; // Nascondi il pulsante dopo il reset
_devicesList = 'Unknown';
_currentPosition = 'Unknown';
});
}
Future<void> _checkLocationPermission() async {
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
// I permessi sono negati, non puoi ottenere la posizione
print('Permesso negato');
return;
}
}
if (permission == LocationPermission.deniedForever) {
// I permessi sono negati permanentemente
return;
}
}
Future<Position> _getCurrentPosition() async {
return await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
}
Future<void> _updateBeaconScanWithNewPosition({Position? position}) async {
String devicesList;
try {
// Usa la posizione fornita o ottieni la posizione attuale
position ??= await _getCurrentPosition();
// Aggiorna la variabile per visualizzare la posizione
setState(() {
_currentPosition = 'Lat: ${position?.latitude}, Lng: ${position?.longitude}';
});
// Eseguire la scansione dei beacon e passare la posizione
devicesList = await _mtBeaconPlusPlugin.startBeaconScan(
scanMac: "C300001AA6B2",
latitude: position.latitude,
longitude: position.longitude,
) ??
'Unknown devices list';
} on PlatformException {
devicesList = 'Failed to get devices list.';
}
if (!mounted) return;
setState(() {
_devicesList = devicesList;
});
}
void _startPositionStream() {
_positionStreamSubscription = Geolocator.getPositionStream(
locationSettings: LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10,
),
).listen((Position position) {
//print("Position obtained: ${position.latitude}, ${position.longitude}");
_updateBeaconScanWithNewPosition(position: position);
});
}
Future<void> initPlatformState() async {
String platformVersion;
try {
platformVersion = await _mtBeaconPlusPlugin.getPlatformVersion() ?? 'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Running on: $_platformVersion\n'),
Text('Devices list: $_devicesList\n'),
Text(
_message,
textAlign: TextAlign.center,
),
SizedBox(height: 20),
Text(
'Current Position: $_currentPosition\n',
textAlign: TextAlign.center,
),
SizedBox(height: 20),
if (_showResetButton)
ElevatedButton(
onPressed: _resetMessage,
child: Text('Reset'),
),
],
),
),
),
);
}
}