From 1b8fb777ad359105059d56d0f383707f8108fc03 Mon Sep 17 00:00:00 2001 From: Robert Ekl Date: Tue, 3 Mar 2026 22:56:30 -0600 Subject: [PATCH] Own and dispose app-level stream subscriptions --- lib/providers/app_state_provider.dart | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/providers/app_state_provider.dart b/lib/providers/app_state_provider.dart index 9151a42..38ea737 100644 --- a/lib/providers/app_state_provider.dart +++ b/lib/providers/app_state_provider.dart @@ -104,6 +104,9 @@ class AppStateProvider extends ChangeNotifier with WidgetsBindingObserver { // Bluetooth adapter state (on/off) BluetoothAdapterState _bluetoothAdapterState = BluetoothAdapterState.unknown; StreamSubscription? _adapterStateSubscription; + StreamSubscription? _connectionSubscription; + StreamSubscription? _gpsStatusSubscription; + StreamSubscription? _gpsPositionSubscription; // GPS state GpsStatus _gpsStatus = GpsStatus.permissionDenied; @@ -547,7 +550,8 @@ class AppStateProvider extends ChangeNotifier with WidgetsBindingObserver { // Listen to Bluetooth connection changes debugLog('[INIT] Setting up BLE connection listener...'); - _bluetoothService.connectionStream.listen((status) async { + await _connectionSubscription?.cancel(); + _connectionSubscription = _bluetoothService.connectionStream.listen((status) async { _connectionStatus = status; if (status == ConnectionStatus.disconnected) { // Check if this is an unexpected disconnect during active wardriving @@ -571,7 +575,8 @@ class AppStateProvider extends ChangeNotifier with WidgetsBindingObserver { // Listen to GPS changes debugLog('[INIT] Setting up GPS status listener...'); - _gpsService.statusStream.listen((status) { + await _gpsStatusSubscription?.cancel(); + _gpsStatusSubscription = _gpsService.statusStream.listen((status) { final previousStatus = _gpsStatus; _gpsStatus = status; @@ -596,7 +601,8 @@ class AppStateProvider extends ChangeNotifier with WidgetsBindingObserver { debugLog('[INIT] Initial GPS status: $_gpsStatus'); debugLog('[INIT] Setting up GPS position listener...'); - _gpsService.positionStream.listen((position) async { + await _gpsPositionSubscription?.cancel(); + _gpsPositionSubscription = _gpsService.positionStream.listen((position) async { _currentPosition = position; notifyListeners(); @@ -4183,6 +4189,9 @@ class AppStateProvider extends ChangeNotifier with WidgetsBindingObserver { _isDisposed = true; WidgetsBinding.instance.removeObserver(this); _adapterStateSubscription?.cancel(); + _connectionSubscription?.cancel(); + _gpsStatusSubscription?.cancel(); + _gpsPositionSubscription?.cancel(); _logRxDataSubscription?.cancel(); _noiseFloorSubscription?.cancel(); _batterySubscription?.cancel();