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:
+36
-11
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user