Fix iOS example app asking permission on app launch (#187)

* Fix iOS example app asking permission on app launch

* Dispose controllers
This commit is contained in:
Rohit Sangwan
2025-11-12 00:14:25 +05:30
committed by GitHub
parent acfa3200ca
commit c3b97e414f
+36 -11
View File
@@ -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<MyApp> {
TextEditingController servicesFilterController = TextEditingController();
TextEditingController namePrefixController = TextEditingController();
TextEditingController manufacturerDataController = TextEditingController();
StreamSubscription<AvailabilityState>? _availabilityStreamSubscription;
bool get isTrackingAvailabilityState =>
_availabilityStreamSubscription != null;
AvailabilityState? bleAvailabilityState;
ScanFilter? scanFilter;
@@ -41,12 +46,6 @@ class _MyAppState extends State<MyApp> {
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<MyApp> {
// };
}
void trackAvailabilityState() {
_availabilityStreamSubscription = UniversalBle.availabilityStream.listen(
(state) {
setState(() {
bleAvailabilityState = state;
});
},
);
setState(() {});
}
Future<void> startScan() async {
await UniversalBle.startScan(
scanFilter: scanFilter,
@@ -118,6 +128,15 @@ class _MyAppState extends State<MyApp> {
);
}
@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<MyApp> {
}
},
),
if (!isTrackingAvailabilityState)
PlatformButton(
text: 'Track Availability State',
onPressed: trackAvailabilityState,
),
if (BleCapabilities.supportsConnectedDevicesApi)
PlatformButton(
text: 'System Devices',
@@ -235,12 +259,13 @@ class _MyAppState extends State<MyApp> {
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),