mt_beacon_plus 0.0.3 copy "mt_beacon_plus: ^0.0.3" to clipboard
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'),
                ),
            ],
          ),
        ),
      ),
    );
  }
}
0
likes
135
points
1
downloads

Publisher

unverified uploader

Weekly Downloads

Plugin per la gestione dei beacon

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on mt_beacon_plus

Packages that implement mt_beacon_plus