Julian Steenbakker

fix: move subscription.cancel to async dispose, move removeObserver

... ... @@ -256,7 +256,7 @@ class _MobileScannerState extends State<MobileScanner>
StreamSubscription? _subscription;
Future<void> initController() async {
Future<void> initMobileScanner() async {
// TODO: This will be fixed in another PR
// If debug mode is enabled, stop the controller first before starting it.
// If a hot-restart is initiated, the controller won't be stopped, and because
... ... @@ -284,7 +284,10 @@ class _MobileScannerState extends State<MobileScanner>
}
}
Future<void> disposeCamera() async {
Future<void> disposeMobileScanner() async {
await _subscription?.cancel();
WidgetsBinding.instance.removeObserver(this);
if (controller.autoStart) {
await controller.stop();
}
... ... @@ -292,7 +295,6 @@ class _MobileScannerState extends State<MobileScanner>
// Dispose default controller if not provided by user
if (widget.controller == null) {
await controller.dispose();
WidgetsBinding.instance.removeObserver(this);
}
}
... ... @@ -300,19 +302,13 @@ class _MobileScannerState extends State<MobileScanner>
void initState() {
super.initState();
controller = widget.controller ?? MobileScannerController();
initController();
initMobileScanner();
}
@override
void dispose() {
if (_subscription != null) {
_subscription!.cancel();
_subscription = null;
}
disposeCamera();
super.dispose();
disposeMobileScanner();
}
@override
... ... @@ -336,7 +332,6 @@ class _MobileScannerState extends State<MobileScanner>
unawaited(controller.start());
case AppLifecycleState.inactive:
unawaited(_subscription?.cancel());
_subscription = null;
unawaited(controller.stop());
}
}
... ...