21.flutter-扫描二维码

引用

  scan: "0.0.7" # 二维码扫描
#  images_picker: "1.1.0" #图片
  image_picker: ^0.6.6 #图片
  permission_handler: "5.1.0+2" #权限管理

封装

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:scan/scan.dart';

///扫描二维码插件
class ScanPage extends StatefulWidget {
  const ScanPage({Key key}) : super(key: key);

  @override
  State createState() => _ScanPageState();
}

///Chaos20220922
class _ScanPageState extends State {
  //闪光灯
  IconData lightIcon = Icons.flash_on;
  //扫描识图
  final ScanController _controller = ScanController();

  ///init
  @override
  void initState() {
    super.initState();
  }

  ///dispose
  @override
  void dispose() {
    super.dispose();
  }

  ///build
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        alignment: AlignmentDirectional.center,
        children: [
          //扫描图
          ScanView(
            controller: _controller,
            scanLineColor: Color(0xFF4759DA),
            onCapture: (result) {
              //返回解析二维码图片结果
              _getResult(result: result);
            },
          ),
          //返回键
          Positioned(
            left: 0,
            top: 25,
            child: IconButton(
              icon: Icon(
                Icons.arrow_back,
                size: 25,
                color: Colors.white,
              ),
              onPressed: () {
                _getResult();
              },
            ),
          ),
          //解析相册图片二维码
          Positioned(
            right: 0,
            top: 25,
            child: MaterialButton(
                child: Icon(
                  Icons.image,
                  size: 25,
                  color: Colors.white,
                ),
                onPressed: () async {
                  var imageFile = await ImagePicker().getImage(source: ImageSource.gallery);
                  if (imageFile != null) {
                    _controller.pause();
                    String result = await Scan.parse(imageFile.path);
                    if (result != null) {
                      //返回解析二维码图片结果
                      _getResult(result: result);
                    }
                  }
                }),
          ),
          //闪光灯
          Positioned(
            bottom: 25,
            child: StatefulBuilder(
              builder: (BuildContext context, StateSetter setState) {
                return MaterialButton(
                    child: Icon(
                      lightIcon,
                      size: 25,
                      color: Colors.white,
                    ),
                    onPressed: () {
                      _controller.toggleTorchMode();
                      if (lightIcon == Icons.flash_on) {
                        lightIcon = Icons.flash_off;
                      } else {
                        lightIcon = Icons.flash_on;
                      }
                      setState(() {});
                    });
              },
            ),
          ),
        ],
      ),
    );
  }

  ///扫描结果返回
  _getResult({String result}) {
    _controller.pause();
    Navigator.of(context).pop(result);
  }
}

调用

 ///扫描二维码
  _scanQrCode() {
    //回收键盘
    // hideTextInput();
    //解析二维码
    Future.delayed(Duration(milliseconds: 500), () async {
      //开启权限
      var status = await Permission.camera.request();
      if (status.isGranted) {
        //获取图片
        var result = await Navigator.of(context).push(MaterialPageRoute(builder: (context) => ScanPage()));
        print("扫描结果: $result");
        if (result == null) return;
      }
    });
  }

你可能感兴趣的:(21.flutter-扫描二维码)