diff --git a/example/lib/home/home.dart b/example/lib/home/home.dart index 03bba47..d3f7c7b 100644 --- a/example/lib/home/home.dart +++ b/example/lib/home/home.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:universal_ble/universal_ble.dart'; @@ -24,7 +26,10 @@ class _MyAppState extends State { TextEditingController servicesFilterController = TextEditingController(); TextEditingController namePrefixController = TextEditingController(); TextEditingController manufacturerDataController = TextEditingController(); + StreamSubscription? _availabilityStreamSubscription; + bool get isTrackingAvailabilityState => + _availabilityStreamSubscription != null; AvailabilityState? bleAvailabilityState; ScanFilter? scanFilter; @@ -41,12 +46,6 @@ class _MyAppState extends State { UniversalBle.queueType = _queueType; UniversalBle.timeout = const Duration(seconds: 10); - UniversalBle.availabilityStream.listen((state) { - setState(() { - bleAvailabilityState = state; - }); - }); - UniversalBle.scanStream.listen((result) { // log(result.toString()); int index = _bleDevices.indexWhere((e) => e.deviceId == result.deviceId); @@ -66,6 +65,17 @@ class _MyAppState extends State { // }; } + void trackAvailabilityState() { + _availabilityStreamSubscription = UniversalBle.availabilityStream.listen( + (state) { + setState(() { + bleAvailabilityState = state; + }); + }, + ); + setState(() {}); + } + Future startScan() async { await UniversalBle.startScan( scanFilter: scanFilter, @@ -118,6 +128,15 @@ class _MyAppState extends State { ); } + @override + void dispose() { + _availabilityStreamSubscription?.cancel(); + servicesFilterController.dispose(); + namePrefixController.dispose(); + manufacturerDataController.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -198,6 +217,11 @@ class _MyAppState extends State { } }, ), + if (!isTrackingAvailabilityState) + PlatformButton( + text: 'Track Availability State', + onPressed: trackAvailabilityState, + ), if (BleCapabilities.supportsConnectedDevicesApi) PlatformButton( text: 'System Devices', @@ -235,12 +259,13 @@ class _MyAppState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - 'Ble Availability : ${bleAvailabilityState?.name}', + if (isTrackingAvailabilityState) + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Ble Availability : ${bleAvailabilityState?.name}', + ), ), - ), ], ), const Divider(color: Colors.blue),