camera_normal 2.3.2 copy "camera_normal: ^2.3.2" to clipboard
camera_normal: ^2.3.2 copied to clipboard

Integrates functions such as camera, photos from gallery, QR scanning

example/lib/main.dart

import 'dart:io';

import 'package:camera_normal/camera_custom.dart';
import 'package:camera_normal/components/language.dart';
import 'package:flutter/material.dart';
import 'package:image/image.dart' as image;

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo Camera',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: false,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final notiBtnTake = ValueNotifier<bool>(false);
  final content = ValueNotifier("");
  // CameraController? cameraController;

  final sizeBtn = 55.0;

  @override
  Widget build(BuildContext context) {
    final size = MediaQuery.of(context).size;
    final heightFrameQR = 400.0 * size.aspectRatio;

    return Scaffold(
      body: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text(content.value),
            ),
            FilledButton(
              onPressed: () async {
                final result = await CameraNormal().show(context, const CameraLanguage());
                print(result);
              },
              child: const Text('Camera normal'),
            ),
            FilledButton(
              onPressed: () async {
                final result = await CameraQr().show(context);
                setState(() {
                  content.value = result ?? '';
                });
              },
              child: const Text('Camera QR'),
            ),
            //todo: take cic
            // FilledButton(
            //   onPressed: () async {
            //     final path = await CameraTakeCIC(
            //       onSetController: (p0) => cameraController = p0,
            //       build: (context) => Stack(
            //         children: [
            //           Positioned(
            //             top: size.height / 2 - heightFrameQR / 2 - 70,
            //             left: size.width * .2,
            //             right: size.width * .2,
            //             child: const Text(
            //               "Include citizen identification card in the frame",
            //               textAlign: TextAlign.center,
            //               style: TextStyle(
            //                 color: Colors.white,
            //                 fontSize: 16,
            //                 fontWeight: FontWeight.w500,
            //               ),
            //             ),
            //           ),
            //           Align(
            //             alignment: const Alignment(.95, -.92),
            //             child: IconButton(
            //               onPressed: () => Navigator.pop(context),
            //               icon: const Icon(
            //                 Icons.close,
            //                 color: Colors.white,
            //                 size: 25,
            //               ),
            //             ),
            //           ),
            //           Align(
            //             alignment: const Alignment(0, .8),
            //             child: GestureDetector(
            //               onTap: () => onTakePicture(context, size),
            //               child: Container(
            //                 decoration: BoxDecoration(
            //                   color: Colors.white38,
            //                   borderRadius: BorderRadius.circular(50),
            //                 ),
            //                 width: sizeBtn + 5,
            //                 height: sizeBtn + 5,
            //                 child: ValueListenableBuilder(
            //                   valueListenable: notiBtnTake,
            //                   builder: (BuildContext context, value, Widget? child) {
            //                     if (value) {
            //                       return Center(
            //                         child: SizedBox(
            //                           width: sizeBtn - 10,
            //                           height: sizeBtn - 10,
            //                           child: const CircularProgressIndicator(
            //                             color: Colors.white,
            //                           ),
            //                         ),
            //                       );
            //                     }
            //                     return Icon(
            //                       Icons.camera_alt_outlined,
            //                       color: Colors.white,
            //                       size: sizeBtn / 2,
            //                     );
            //                   },
            //                 ),
            //               ),
            //             ),
            //           ),
            //         ],
            //       ),
            //     ).show(context);
            //     if (path is String && context.mounted) {
            //       showDialog(
            //         context: context,
            //         builder: (context) => Dialog(
            //           child: Image.file(File(path)),
            //         ),
            //       );
            //     }
            //   },
            //   child: const Text(
            //     'Camera take CIC',
            //     textAlign: TextAlign.center,
            //   ),
            // ),
            FilledButton(
              onPressed: () async {
                final path = await SelectImage().show(context, CameraLanguage());
                if (path is String && context.mounted) {
                  showDialog(
                    context: context,
                    builder: (context) => Dialog(
                      child: Image.file(File(path)),
                    ),
                  );
                }
              },
              child: const Text(
                'Show image',
                textAlign: TextAlign.center,
              ),
            ),
            // CameraCustom(
            //   cameraView: CameraView(),
            //   builder: (context, cameraView) {
            //     return Container(
            //       color: Colors.blue,
            //       width: 300,
            //       height: 500,
            //       child: Stack(
            //         children: [
            //           SizedBox(
            //             width: 250,
            //             height: 400,
            //             child: cameraView,
            //           ),
            //         ],
            //       ),
            //     );
            //   },
            // ),
          ],
        ),
      ),
    );
  }

  void onTakePicture(BuildContext context, Size size) async {
    // if (notiBtnTake.value) return;
    // notiBtnTake.value = true;
    // try {
    //   final xFile = await cameraController?.takePicture();
    //   await cameraController?.pausePreview();
    //   if (xFile != null) {
    //     final img = await image.decodeImageFile(xFile.path);
    //     if (img != null) {
    //       final heightImg = img.height;
    //       final widthImg = img.width;
    //       final heightFrame = widthImg * .55;
    //       final widthImage = (widthImg * .9).toInt();
    //       final heightImage = (widthImg * .55).toInt();
    //
    //       final imageCrop = image.copyCrop(
    //         img,
    //         x: 0,
    //         y: (heightImg / 2 - heightFrame / 2).toInt(),
    //         width: widthImage,
    //         height: heightImage,
    //       );
    //       await File(xFile.path).writeAsBytes(image.encodePng(imageCrop));
    //
    //       notiBtnTake.value = false;
    //       if (context.mounted) {
    //         final result = await DialogConfirmImage(context).show(xFile.path, size);
    //
    //         if (result is String && context.mounted) {
    //           Navigator.pop(context, result);
    //         }
    //       }
    //     }
    //   }
    // } catch (e, s) {
    //   print(e);
    //   print(s);
    // }
    // await cameraController?.resumePreview();
    // notiBtnTake.value = false;
  }
}
5
likes
90
points
114
downloads

Publisher

verified publishertranduc1710.com

Weekly Downloads

Integrates functions such as camera, photos from gallery, QR scanning

Repository (GitHub)
View/report issues

Topics

#camera #qr

Documentation

API reference

Funding

Consider supporting this project:

github.com

License

BSD-3-Clause (license)

Dependencies

camerawesome, cupertino_icons, flutter, google_mlkit_barcode_scanning, google_mlkit_commons, image, image_picker, path_provider, photo_manager

More

Packages that depend on camera_normal