Open
Description
I am trying to stop the ble scanning when the app goes to background using WidgetsBindingObserver to obtain the app lifecycle events
class _Pairing0PageState extends State<Pairing0Page> with WidgetsBindingObserver{
@override
void initState() {
super.initState();
context.read<BleBloc>().startScan();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print('didChangeAppLifecycleState');
if(state == AppLifecycleState.resumed){
context.read<BleBloc>().startScan();
}
else{
context.read<BleBloc>().stopScan();
}
}
...
}
when the app goes to background, the scan stops (and correctly resumes when app comes foreground) but I get the following error message:
E/flutter (30336): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Attempt to invoke interface method 'void com.polidea.multiplatformbleadapter.BleAdapter.stopDeviceScan()' on a null object reference, null)
E/flutter (30336): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter (30336): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18)
E/flutter (30336): <asynchronous suspension>
E/flutter (30336): #2 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:329:12)
E/flutter (30336): #3 ScanningMixin.stopDeviceScan (package:flutter_ble_lib/src/bridge/scanning_mixin.dart:50:26)
E/flutter (30336): #4 InternalBleManager.stopPeripheralScan (package:flutter_ble_lib/src/internal_ble_manager.dart:63:48)
E/flutter (30336): #5 BleBloc.stopScan (package:yunga/blocs/ble_bloc.dart:53:23)
E/flutter (30336): #6 _Pairing0PageState.didChangeAppLifecycleState (package:yunga/pages/pairing0_page.dart:38:31)
E/flutter (30336): #7 WidgetsBinding.handleAppLifecycleStateChanged (package:flutter/src/widgets/binding.dart:655:16)
E/flutter (30336): #8 SchedulerBinding._handleLifecycleMessage (package:flutter/src/scheduler/binding.dart:349:5)
E/flutter (30336): #9 BasicMessageChannel.setMessageHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:74:49)
E/flutter (30336): #10 _DefaultBinaryMessenger.handlePlatformMessage (package:flutter/src/services/binding.dart:199:33)
E/flutter (30336): #11 _invoke3.<anonymous closure> (dart:ui/hooks.dart:290:15)
E/flutter (30336): #12 _rootRun (dart:async/zone.dart:1184:13)
E/flutter (30336): #13 _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter (30336): #14 _CustomZone.runGuarded (dart:async/zone.dart:979:7)
E/flutter (30336): #15 _invoke3 (dart:ui/hooks.dart:289:10)
E/flutter (30336): #16 _dispatchPlatformMessage (dart:ui/hooks.dart:164:5)
Am I using the right approach here ?