From 443e0b57c7aa722e035c8ecaf8363eeecb7c85ce Mon Sep 17 00:00:00 2001 From: ookami-kb Date: Sat, 4 May 2024 22:55:45 +0200 Subject: [PATCH] fix: camera overlay rendering --- .../widgets/qr_scanner_background.dart | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/espressocash_app/lib/features/qr_scanner/widgets/qr_scanner_background.dart b/packages/espressocash_app/lib/features/qr_scanner/widgets/qr_scanner_background.dart index 9de5cc3ffa..5a196635ed 100644 --- a/packages/espressocash_app/lib/features/qr_scanner/widgets/qr_scanner_background.dart +++ b/packages/espressocash_app/lib/features/qr_scanner/widgets/qr_scanner_background.dart @@ -6,7 +6,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import '../../../gen/assets.gen.dart'; -class QrScannerBackground extends StatelessWidget { +class QrScannerBackground extends StatefulWidget { const QrScannerBackground({ super.key, required this.child, @@ -14,6 +14,19 @@ class QrScannerBackground extends StatelessWidget { final Widget child; + @override + State createState() => _QrScannerBackgroundState(); +} + +class _QrScannerBackgroundState extends State { + late final Future _info; + + @override + void initState() { + super.initState(); + _info = _readFrame(); + } + Future _readFrame() async { final byteData = await rootBundle.load(Assets.images.qrFrame.path); @@ -25,13 +38,10 @@ class QrScannerBackground extends StatelessWidget { @override Widget build(BuildContext context) => FutureBuilder( - future: _readFrame(), - builder: (context, frame) => CustomPaint( - foregroundPainter: _Painter( - frame: frame.data, - dimension: 350, - ), - child: child, + future: _info, + builder: (context, snapshot) => CustomPaint( + foregroundPainter: _Painter(frame: snapshot.data, dimension: 350), + child: widget.child, ), ); } @@ -91,5 +101,7 @@ class _Painter extends CustomPainter { } @override - bool shouldRepaint(covariant CustomPainter oldDelegate) => false; + bool shouldRepaint(covariant _Painter oldDelegate) => + oldDelegate.dimension != dimension || + oldDelegate.frame?.size != frame?.size; }