You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
323 lines
10 KiB
Dart
323 lines
10 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
// import 'package:qr_code_scanner/qr_code_scanner.dart';
|
|
import '../../../custom_widgets/custom_app_bar.dart';
|
|
import '../controllers/qr_setting_controller.dart';
|
|
|
|
class QrScanScreen extends GetView<QrSettingController> {
|
|
const QrScanScreen({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: DashBoardAppBar(
|
|
onBackButtonPressed: () {
|
|
Get.back();
|
|
},
|
|
title: "QR SCAN",
|
|
),
|
|
body: GetBuilder<QrSettingController>(builder: (controller) {
|
|
return Column(
|
|
children: <Widget>[
|
|
// Expanded(
|
|
// flex: 5,
|
|
// child: QRView(
|
|
// key: controller.qrKey,
|
|
// onQRViewCreated: controller.onQRViewCreated,
|
|
// overlay: QrScannerOverlayShape(),
|
|
// ),
|
|
// ),
|
|
Expanded(
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
|
children: [
|
|
GestureDetector(
|
|
onTap: () async {
|
|
await controller.scanfromImage();
|
|
},
|
|
child: const Icon(Icons.image)),
|
|
GestureDetector(
|
|
onTap: () {
|
|
controller.toggleFlash();
|
|
},
|
|
child: FutureBuilder<bool?>(
|
|
future: controller.getFlashStatus(),
|
|
builder: (context, snapshot) {
|
|
return Icon(
|
|
(snapshot.data ?? false)
|
|
? Icons.flash_off
|
|
: Icons.flash_on,
|
|
);
|
|
},
|
|
),
|
|
),
|
|
],
|
|
)),
|
|
],
|
|
);
|
|
}),
|
|
);
|
|
}
|
|
}
|
|
//
|
|
// // import 'dart:async';
|
|
//
|
|
// // import 'package:flutter/material.dart';
|
|
// // import 'package:get/get.dart';
|
|
// // import 'package:qr_flutter/qr_flutter.dart';
|
|
// // import 'package:uco_ciihive/app/core/utils/logs_utils.dart';
|
|
// // import 'package:uco_ciihive/app/custom_widgets/custom_app_bar.dart';
|
|
// // import 'package:mobile_scanner/mobile_scanner.dart';
|
|
// // import 'scanner_buttons.dart';
|
|
//
|
|
// // class QrScanScreen extends StatefulWidget {
|
|
// // const QrScanScreen({super.key});
|
|
//
|
|
// // @override
|
|
// // State<QrScanScreen> createState() => _QrScanScreenState();
|
|
// // }
|
|
//
|
|
// // class _QrScanScreenState extends State<QrScanScreen> {
|
|
// // //
|
|
//
|
|
// // final MobileScannerController scanController = MobileScannerController(
|
|
// // formats: [BarcodeFormat.qrCode],
|
|
// // useNewCameraSelector: true,
|
|
// // facing: CameraFacing.back,
|
|
// // );
|
|
//
|
|
// // StreamSubscription<Object?>? _subscription;
|
|
//
|
|
// // late final AppLifecycleListener _listener;
|
|
//
|
|
// // Barcode? _barcode;
|
|
//
|
|
// // @override
|
|
// // void initState() {
|
|
//
|
|
// // initScanner();
|
|
// // listenAppLifeState();
|
|
//
|
|
// // super.initState();
|
|
// // }
|
|
//
|
|
// // @override
|
|
// // Future dispose() async {
|
|
// // unawaited(_subscription?.cancel());
|
|
// // _subscription = null;
|
|
// // _listener.dispose();
|
|
//
|
|
// // super.dispose();
|
|
//
|
|
// // await scanController.dispose();
|
|
// // }
|
|
//
|
|
// // void listenAppLifeState() {
|
|
// // _listener = AppLifecycleListener(
|
|
// // onStateChange: _onStateChanged,
|
|
// // );
|
|
// // }
|
|
//
|
|
// // void initScanner() {
|
|
// // _subscription = scanController.barcodes.listen(_handleBarcode);
|
|
//
|
|
// // unawaited(scanController.start());
|
|
// // }
|
|
//
|
|
// // Future<void> _onStateChanged(AppLifecycleState state) async {
|
|
// // dp("Scanner state", state.name);
|
|
// // switch (state) {
|
|
// // case AppLifecycleState.hidden:
|
|
// // case AppLifecycleState.paused:
|
|
// // case AppLifecycleState.detached:
|
|
// // return;
|
|
// // case AppLifecycleState.resumed:
|
|
// // _subscription = scanController.barcodes.listen(_handleBarcode);
|
|
//
|
|
// // unawaited(scanController.start());
|
|
// // case AppLifecycleState.inactive:
|
|
// // unawaited(_subscription?.cancel());
|
|
// // _subscription = null;
|
|
// // unawaited(scanController.stop());
|
|
// // }
|
|
// // }
|
|
//
|
|
// // void _handleBarcode(BarcodeCapture barcodes) {
|
|
// // _barcode = barcodes.barcodes.firstOrNull;
|
|
// // dp("Barcode Result Raw", _barcode?.rawValue);
|
|
// // dp("Barcode Display Value", _barcode?.displayValue);
|
|
//
|
|
// // setState(() {});
|
|
// // }
|
|
//
|
|
// // @override
|
|
// // Widget build(BuildContext context) {
|
|
// // final scanWindow = Rect.fromCenter(
|
|
// // center: MediaQuery.sizeOf(context).center(Offset.zero),
|
|
// // width: 200,
|
|
// // height: 200,
|
|
// // );
|
|
// // return Scaffold(
|
|
// // appBar: DashBoardAppBar(
|
|
// // onBackButtonPressed: () {
|
|
// // Get.back();
|
|
// // },
|
|
// // ),
|
|
// // body: Stack(
|
|
// // fit: StackFit.expand,
|
|
// // children: [
|
|
// // Center(
|
|
// // child: MobileScanner(
|
|
// // fit: BoxFit.contain,
|
|
// // controller: scanController,
|
|
// // scanWindow: scanWindow,
|
|
// // errorBuilder: (context, error, child) {
|
|
// // // return ScannerErrorWidget(error: error);
|
|
// // return const SizedBox(
|
|
// // child: Text("Error Widget"),
|
|
// // );
|
|
// // },
|
|
// // overlayBuilder: (context, constraints) {
|
|
// // return Padding(
|
|
// // padding: const EdgeInsets.all(16.0),
|
|
// // child: Align(
|
|
// // alignment: Alignment.bottomCenter,
|
|
// // child:
|
|
// // ScannedBarcodeLabel(barcodes: scanController.barcodes),
|
|
// // ),
|
|
// // );
|
|
// // },
|
|
// // ),
|
|
// // ),
|
|
// // ValueListenableBuilder(
|
|
// // valueListenable: scanController,
|
|
// // builder: (context, value, child) {
|
|
// // if (!value.isInitialized ||
|
|
// // !value.isRunning ||
|
|
// // value.error != null) {
|
|
// // return const SizedBox(
|
|
// // child: Text("No init Scanner"),
|
|
// // );
|
|
// // }
|
|
//
|
|
// // return CustomPaint(
|
|
// // painter: ScannerOverlay(scanWindow: scanWindow),
|
|
// // );
|
|
// // },
|
|
// // ),
|
|
// // Align(
|
|
// // alignment: Alignment.bottomCenter,
|
|
// // child: Padding(
|
|
// // padding: const EdgeInsets.all(16.0),
|
|
// // child: Row(
|
|
// // mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
// // children: [
|
|
// // ToggleFlashlightButton(controller: scanController),
|
|
// // SwitchCameraButton(controller: scanController),
|
|
// // ],
|
|
// // ),
|
|
// // ),
|
|
// // ),
|
|
// // ],
|
|
// // ),
|
|
// // );
|
|
// // }
|
|
// // }
|
|
//
|
|
// // class ScannerOverlay extends CustomPainter {
|
|
// // const ScannerOverlay({
|
|
// // required this.scanWindow,
|
|
// // this.borderRadius = 12.0,
|
|
// // });
|
|
//
|
|
// // final Rect scanWindow;
|
|
// // final double borderRadius;
|
|
//
|
|
// // @override
|
|
// // void paint(Canvas canvas, Size size) {
|
|
// // // TODO: use `Offset.zero & size` instead of Rect.largest
|
|
// // // we need to pass the size to the custom paint widget
|
|
// // final backgroundPath = Path()..addRect(Rect.largest);
|
|
//
|
|
// // final cutoutPath = Path()
|
|
// // ..addRRect(
|
|
// // RRect.fromRectAndCorners(
|
|
// // scanWindow,
|
|
// // topLeft: Radius.circular(borderRadius),
|
|
// // topRight: Radius.circular(borderRadius),
|
|
// // bottomLeft: Radius.circular(borderRadius),
|
|
// // bottomRight: Radius.circular(borderRadius),
|
|
// // ),
|
|
// // );
|
|
//
|
|
// // final backgroundPaint = Paint()
|
|
// // ..color = Colors.black.withOpacity(0.5)
|
|
// // ..style = PaintingStyle.fill
|
|
// // ..blendMode = BlendMode.dstOut;
|
|
//
|
|
// // final backgroundWithCutout = Path.combine(
|
|
// // PathOperation.difference,
|
|
// // backgroundPath,
|
|
// // cutoutPath,
|
|
// // );
|
|
//
|
|
// // final borderPaint = Paint()
|
|
// // ..color = Colors.white
|
|
// // ..style = PaintingStyle.stroke
|
|
// // ..strokeWidth = 4.0;
|
|
//
|
|
// // final borderRect = RRect.fromRectAndCorners(
|
|
// // scanWindow,
|
|
// // topLeft: Radius.circular(borderRadius),
|
|
// // topRight: Radius.circular(borderRadius),
|
|
// // bottomLeft: Radius.circular(borderRadius),
|
|
// // bottomRight: Radius.circular(borderRadius),
|
|
// // );
|
|
//
|
|
// // // First, draw the background,
|
|
// // // with a cutout area that is a bit larger than the scan window.
|
|
// // // Finally, draw the scan window itself.
|
|
// // canvas.drawPath(backgroundWithCutout, backgroundPaint);
|
|
// // canvas.drawRRect(borderRect, borderPaint);
|
|
// // }
|
|
//
|
|
// // @override
|
|
// // bool shouldRepaint(ScannerOverlay oldDelegate) {
|
|
// // return scanWindow != oldDelegate.scanWindow ||
|
|
// // borderRadius != oldDelegate.borderRadius;
|
|
// // }
|
|
// // }
|
|
//
|
|
// // class ScannedBarcodeLabel extends StatelessWidget {
|
|
// // const ScannedBarcodeLabel({
|
|
// // super.key,
|
|
// // required this.barcodes,
|
|
// // });
|
|
//
|
|
// // final Stream<BarcodeCapture> barcodes;
|
|
//
|
|
// // @override
|
|
// // Widget build(BuildContext context) {
|
|
// // return StreamBuilder(
|
|
// // stream: barcodes,
|
|
// // builder: (context, snapshot) {
|
|
// // final scannedBarcodes = snapshot.data?.barcodes ?? [];
|
|
//
|
|
// // if (scannedBarcodes.isEmpty) {
|
|
// // return const Text(
|
|
// // 'Scan something!',
|
|
// // overflow: TextOverflow.fade,
|
|
// // style: TextStyle(color: Colors.wh'ite),
|
|
// // );
|
|
// // }
|
|
//
|
|
// // return Text(
|
|
// // scannedBarcodes.first.displayValue ?? 'No display value.',
|
|
// // overflow: TextOverflow.fade,
|
|
// // style: const TextStyle(color: Colors.white),
|
|
// // );
|
|
// // },
|
|
// // );
|
|
// // }
|
|
// // }
|