fast_barcode_scanner 2.0.0-dev.2 copy "fast_barcode_scanner: ^2.0.0-dev.2" to clipboard
fast_barcode_scanner: ^2.0.0-dev.2 copied to clipboard

PlatformAndroidiOS
outdated

A fast barcode scanner using MLKit on Android and AVFoundation on iOS.

example/lib/main.dart

import 'package:fast_barcode_scanner/fast_barcode_scanner.dart';
import 'package:fast_barcode_scanner_example/utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'scanning_screen/scanning_screen.dart';

void main() {
  runApp(const MaterialApp(home: HomeScreen()));
}

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  bool _disposeCheckboxValue = true;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Fast Barcode Scanner')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: [
            ElevatedButton(
              child: const Text('Open Scanner'),
              onPressed: () => Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (_) => ScanningScreen(
                    dispose: _disposeCheckboxValue,
                  ),
                ),
              ),
            ),
            ElevatedButton(
              onPressed: () async {
                final cam = CameraController();

                final dialog = SimpleDialog(
                  children: [
                    SimpleDialogOption(
                      child: const Text('Choose image'),
                      onPressed: () => Navigator.pop(context, 1),
                    ),
                    SimpleDialogOption(
                      child: const Text('Open Picker'),
                      onPressed: () => Navigator.pop(context, 2),
                    )
                  ],
                );

                final result = await showDialog<int>(
                    context: context, builder: (_) => dialog);

                final ImageSource source;
                if (result == 1) {
                  final bytes = await rootBundle.load('assets/barcodes.png');
                  source = ImageSource.binary(bytes);
                } else if (result == 2) {
                  source = ImageSource.picker();
                } else {
                  return;
                }

                try {
                  final barcodes = await cam.scanImage(source);

                  showDialog(
                    context: context,
                    builder: (_) {
                      final List<Widget> children;

                      if (barcodes == null) {
                        children = const [Center(child: Text('User aborted'))];
                      } else if (barcodes.isEmpty) {
                        children = const [
                          Center(child: Text('No barcodes detected'))
                        ];
                      } else {
                        children =
                            barcodes.map((e) => Text(e.toString())).toList();
                      }

                      return SimpleDialog(
                        title: const Text('Result'),
                        children: children,
                      );
                    },
                  );
                } catch (error, stack) {
                  presentErrorAlert(context, error, stack);
                }
              },
              child: const Text('Scan image'),
            ),
            Row(
              mainAxisSize: MainAxisSize.min,
              children: [
                const Text('Dispose:'),
                Checkbox(
                  value: _disposeCheckboxValue,
                  onChanged: (newValue) => setState(
                    () => _disposeCheckboxValue = newValue!,
                  ),
                ),
              ],
            )
          ],
        ),
      ),
    );
  }
}
54
likes
130
pub points
90%
popularity

Publisher

unverified uploader

A fast barcode scanner using MLKit on Android and AVFoundation on iOS.

Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

MIT (LICENSE)

Dependencies

fast_barcode_scanner_platform_interface, flutter

More

Packages that depend on fast_barcode_scanner