Skip to content

Commit f98cd05

Browse files
committed
1507: add concrete camera resolution for specific model to fix qr code scanning
1 parent 8ddfb2e commit f98cd05

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

frontend/lib/identification/qr_code_scanner/qr_code_scanner.dart

+25-6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import 'package:mobile_scanner/mobile_scanner.dart';
88

99
import 'package:ehrenamtskarte/l10n/translations.g.dart';
1010

11+
import 'package:ehrenamtskarte/util/android_utils.dart';
12+
1113
typedef OnCodeScannedCallback = Future<void> Function(Uint8List code);
1214

1315
class QrCodeScanner extends StatefulWidget {
@@ -20,12 +22,29 @@ class QrCodeScanner extends StatefulWidget {
2022
}
2123

2224
class _QRViewState extends State<QrCodeScanner> {
25+
bool _hasCameraIssues = false;
26+
27+
@override
28+
void initState() {
29+
super.initState();
30+
// Workaround for https://github.com/juliansteenbakker/mobile_scanner/issues/698
31+
// Check once the qr code scanner was initialized if the device has camera issues
32+
// Depending on that set a controller with predefined camera solution to fix that qr code reading issues
33+
WidgetsBinding.instance.addPostFrameCallback((_) async {
34+
setState(() async {
35+
_hasCameraIssues = await isDeviceWithCameraIssues();
36+
});
37+
});
38+
}
39+
2340
final MobileScannerController _controller = MobileScannerController(
24-
torchEnabled: false,
25-
detectionSpeed: DetectionSpeed.normal,
26-
formats: [BarcodeFormat.qrCode],
27-
returnImage: false,
28-
);
41+
torchEnabled: false, detectionSpeed: DetectionSpeed.normal, formats: [BarcodeFormat.qrCode], returnImage: false);
42+
final MobileScannerController _controllerCameraResolution = MobileScannerController(
43+
torchEnabled: false,
44+
detectionSpeed: DetectionSpeed.normal,
45+
formats: [BarcodeFormat.qrCode],
46+
returnImage: false,
47+
cameraResolution: const Size(640, 480));
2948
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
3049

3150
// Determines whether a code is currently processed by the onCodeScanned callback
@@ -37,7 +56,7 @@ class _QRViewState extends State<QrCodeScanner> {
3756
@override
3857
Widget build(BuildContext context) {
3958
final t = context.t;
40-
final controller = _controller;
59+
final controller = _hasCameraIssues ? _controllerCameraResolution : _controller;
4160
return Stack(
4261
children: [
4362
Column(

frontend/lib/main.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:ehrenamtskarte/configuration/definitions.dart';
55
import 'package:ehrenamtskarte/l10n/translations.g.dart';
66
import 'package:ehrenamtskarte/sentry.dart';
77
import 'package:ehrenamtskarte/settings_provider.dart';
8-
import 'package:ehrenamtskarte/util/android_certificate.dart';
8+
import 'package:ehrenamtskarte/util/android_utils.dart';
99
import 'package:flutter/material.dart';
1010
import 'package:flutter/services.dart';
1111
import 'package:slang/builder/model/enums.dart';

frontend/lib/util/android_certificate.dart renamed to frontend/lib/util/android_utils.dart

+10
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,13 @@ Future<bool> certificateIsRequired() async {
1212
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
1313
return androidInfo.version.sdkInt < 25;
1414
}
15+
16+
Future<bool> isDeviceWithCameraIssues() async {
17+
if (!Platform.isAndroid) {
18+
return false;
19+
}
20+
List<String> devicesWithoutQRCodeDetection = ['SM-A236B'];
21+
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
22+
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
23+
return devicesWithoutQRCodeDetection.contains(androidInfo.model);
24+
}

0 commit comments

Comments
 (0)