lottis_birthday_escaperoom_app/lib/screens/qr.dart

107 lines
3.9 KiB
Dart
Raw Permalink Normal View History

2024-08-17 03:19:32 +00:00
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:lottis_birthday_escaperoom_app/controller/gamecontroller.dart';
import 'package:lottis_birthday_escaperoom_app/scanned_barcode_label.dart';
import 'package:lottis_birthday_escaperoom_app/scanner_error_widget.dart';
import 'package:lottis_birthday_escaperoom_app/screens/admin.dart';
import 'package:lottis_birthday_escaperoom_app/screens/pattern.dart';
import 'package:lottis_birthday_escaperoom_app/util.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
class QrScreen extends StatelessWidget {
const QrScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
GameController c = Get.find();
return PopScope(
canPop: false,
child: Scaffold(
appBar: AppBar(
title: const Text('Lotti\'s Escape Room - Rätsel 2'),
actions: [
IconButton(
icon: const Icon(Icons.smart_toy_outlined),
onPressed: () {
showAdminLoginPopup();
},
),
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(c.storyTitle, style: Theme.of(context).textTheme.titleLarge),
const SizedBox(height: 8),
Container(
height: 600,
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(10),
),
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
c.story,
style: const TextStyle(fontSize: 20),
),
),
),
),
const SizedBox(height: 20),
const Center(
child: Text('Zum entsperren, bitte QR Code scannen.'),
),
Container(
height: 300,
child: MobileScanner(
fit: BoxFit.contain,
controller: c.qrPageController,
errorBuilder: (context, error, child) {
return ScannerErrorWidget(error: error);
},
overlayBuilder: (context, constraints) {
return Align(
alignment: Alignment.center,
child: Container(
height: 200,
width: 200,
decoration: BoxDecoration(
border: Border.all(
color: Colors.white,
width: 3,
),
borderRadius: BorderRadius.circular(10),
),
));
},
onDetect: (barcodes) {
if (barcodes.barcodes.isNotEmpty) {
for (var barcode in barcodes.barcodes) {
if (barcode.rawValue == null) {
continue;
}
playBeepSound();
if (barcode.rawValue == c.calendarQrData) {
c.qrPageController.stop();
Get.offAll(PatternScreen());
} else {
Get.snackbar("Falscher Code",
"Der Code '${barcode.rawValue}' ist falsch.");
}
}
}
},
),
),
],
),
),
),
);
}
}