diff --git a/lib/src/lifecycle_event_handler.dart b/lib/src/lifecycle_event_handler.dart new file mode 100644 index 0000000..f6da736 --- /dev/null +++ b/lib/src/lifecycle_event_handler.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/foundation.dart'; + +class LifecycleEventHandler extends WidgetsBindingObserver { + LifecycleEventHandler({ + this.resumeCallBack, + this.suspendingCallBack, + }); + + final AsyncCallback resumeCallBack; + final AsyncCallback suspendingCallBack; + + @override + Future didChangeAppLifecycleState(AppLifecycleState state) async { + switch (state) { + case AppLifecycleState.resumed: + if (resumeCallBack != null) { + await resumeCallBack(); + } + break; + case AppLifecycleState.inactive: + case AppLifecycleState.paused: + case AppLifecycleState.detached: + if (suspendingCallBack != null) { + await suspendingCallBack(); + } + break; + } + } +} diff --git a/lib/src/qr_code_scanner.dart b/lib/src/qr_code_scanner.dart index ec28402..66243df 100644 --- a/lib/src/qr_code_scanner.dart +++ b/lib/src/qr_code_scanner.dart @@ -4,6 +4,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'lifecycle_event_handler.dart'; import 'qr_scanner_overlay_shape.dart'; import 'types/barcode.dart'; import 'types/barcode_format.dart'; @@ -58,6 +59,17 @@ class QRView extends StatefulWidget { class _QRViewState extends State { var _channel; + @override + void initState() { + super.initState(); + + WidgetsBinding.instance.addObserver( + LifecycleEventHandler(resumeCallBack: () async => + QRViewController.updateDimensions(widget.key, _channel, + overlay: widget.overlay) + )); + } + @override Widget build(BuildContext context) { return NotificationListener(