From ba67e47b7d657ec78c9b6b3cce8158fd4442e618 Mon Sep 17 00:00:00 2001 From: Julian Steenbakker Date: Mon, 8 Feb 2021 08:51:41 +0100 Subject: [PATCH] Added onResume listener and updateDimensions call (#250) --- lib/src/lifecycle_event_handler.dart | 30 ++++++++++++++++++++++++++++ lib/src/qr_code_scanner.dart | 12 +++++++++++ 2 files changed, 42 insertions(+) create mode 100644 lib/src/lifecycle_event_handler.dart 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(