import 'package:flutter/material.dart'; import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:smoke_cess_app/models/settings.dart'; import 'package:smoke_cess_app/service/json_service.dart'; import 'package:smoke_cess_app/service/settings_service.dart'; import '../widgets/missing_config_popup.dart'; class ScannerPage extends StatefulWidget { const ScannerPage({super.key}); @override State createState() => ScannerPageState(); } class ScannerPageState extends State { bool scanning = false; @override Widget build(BuildContext context) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ scanning ? Expanded( child: MobileScanner( fit: BoxFit.contain, controller: MobileScannerController( detectionTimeoutMs: 2000, ), onDetect: (capture) { //TODO Errorhandling!! final List barcodes = capture.barcodes; for (final barcode in barcodes) { if (barcode.rawValue != null) { String qrText = barcode.rawValue!; Map json = stringToJSON(qrText); Settings settings = Settings.fromJson(json); saveSettings(settings); setState(() { scanning = false; showDialog( context: context, builder: (BuildContext context) { return MissingConfigPopup( title: 'Konfiguration erfolgreich', text: 'Du gehörst zu Gruppe ${settings.group}', ); }); }); } } }, )) : ElevatedButton( style: ElevatedButton.styleFrom( textStyle: const TextStyle(fontSize: 20)), onPressed: () { setState(() => scanning = true); }, child: const Text('Scan QR Code'), ), const SizedBox(height: 30), ElevatedButton( style: ElevatedButton.styleFrom( textStyle: const TextStyle(fontSize: 20)), onPressed: () { loadSettingsFromLocalJSON(); }, child: const Text('Read JSON'), ) ], )); } }