返回顶部
首页 > 资讯 > 移动开发 >flutter开发实战-flutter二维码条形码扫一扫功能实现
  • 310
分享到

flutter开发实战-flutter二维码条形码扫一扫功能实现

flutter扫一扫二维码条形码 2023-09-02 10:09:25 310人浏览 安东尼
摘要

Flutter开发实战-flutter二维码条形码扫一扫功能实现 flutter开发实战-flutter二维码扫一扫功能实现,要使用到摄像头的原生的功能,使用的是插件:scan 效果图如下 一、扫一

Flutter开发实战-flutter二维码条形码扫一扫功能实现

flutter开发实战-flutter二维码扫一扫功能实现,要使用到摄像头的原生的功能,使用的是插件:scan

效果图如下

在这里插入图片描述

一、扫一扫插件scan

  # 扫一扫  scan: ^1.6.0

1.1 iOS权限设置

<key>NSCameraUsageDescription</key><string>Your Description</string><key>io.flutter.embedded_views_preview</key><string>YES</string>

1.2 Android权限设置

<uses-permission android:name="android.permission.CAMERA" /><application>  <meta-data    android:name="flutterEmbedding"    android:value="2" /></application>

1.3 使用ScanView的widget

ScanController controller = ScanController();String qrcode = 'Unknown';Container(  width: 250, // custom wrap size  height: 250,  child: ScanView(    controller: controller,// custom scan area, if set to 1.0, will scan full area    scanAreaScale: .7,    scanLineColor: Colors.green.shade400,    onCapture: (data) {      // do something    },  ),),

扫一扫Widget使用ScanController来做响应的控制

暂停/恢复camera

controller.pause();controller.resume();

识别图片的二维码结果

String result = await Scan.parse(imagePath);

闪光灯切换

controller.toggleTorchMode();

二、代码实现

实现自定义扫码的appBar

class QrScanAppBar extends StatefulWidget {  const QrScanAppBar({    Key? key,    required this.toolbarHeight,    this.elevation,    this.backgroundColor,    this.leadingWidget,    this.trailingWidget,    this.centerWidget,    this.brightness,    this.padding, this.barPadding,  }) : super(key: key);  final double toolbarHeight;  final double? elevation;  final Color? backgroundColor;  final Widget? leadingWidget;  final Widget? trailingWidget;  final Widget? centerWidget;  final Brightness? brightness;  final EdgeInsetsGeometry? padding;  final EdgeInsetsGeometry? barPadding;    State<QrScanAppBar> createState() => _QrScanAppBarState();}class _QrScanAppBarState extends State<QrScanAppBar> {    Widget build(BuildContext context) {    final SystemUiOverlayStyle overlayStyle =        widget.brightness == Brightness.dark            ? SystemUiOverlayStyle.light            : SystemUiOverlayStyle.dark;    Widget leadingWidget = (widget.leadingWidget ?? Container());    Widget centerWidget = (widget.centerWidget ?? Container());    Widget trailingWidget = (widget.trailingWidget ?? Container());    return AnnotatedRegion<SystemUiOverlayStyle>(      //套AnnotatedRegion是为了增加状态栏控制      value: overlayStyle,      child: Material(        //套Material是为了增加elevation        elevation: widget.elevation ?? 0,        color: Colors.transparent,        child: Container(          padding: widget.padding,          height: widget.toolbarHeight + ScreenUtil().statusBarHeight,          decoration: BoxDecoration(            color: widget.backgroundColor,          ),          child: Column(            mainAxisAlignment: MainAxisAlignment.center,            crossAxisAlignment: CrossAxisAlignment.center,            children: [              Container(                height: ScreenUtil().statusBarHeight,              ),              Expanded(                child: Container(                  padding: widget.barPadding,                  height: widget.toolbarHeight,                  alignment: Alignment.center,                  child: Row(                    mainAxisAlignment: MainAxisAlignment.center,                    crossAxisAlignment: CrossAxisAlignment.center,                    children: [                      Container(                        height: widget.toolbarHeight,                        child: leadingWidget,                      ),                      Expanded(                        child: Container(                          alignment: Alignment.center,                          height: widget.toolbarHeight,                          child: centerWidget,                        ),                      ),                      Container(                        height: widget.toolbarHeight,                        child: trailingWidget,                      ),                    ],                  ),                ),              )            ],          ),        ),      ),    );  }}

实现扫一扫界面

class QrScanPage extends StatefulWidget {  const QrScanPage({Key? key, this.arguments}) : super(key: key);  final Object? arguments;    State<QrScanPage> createState() => _QrScanPageState();}class _QrScanPageState extends State<QrScanPage> {  ScanController scanController = ScanController();  String qrcode = 'Unknown';  bool torchOn = false;    void initState() {    // TODO: implement initState    super.initState();  }    void dispose() {    // TODO: implement dispose    scanController.pause();    super.dispose();  }  void changedTorchMode() {    scanController.toggleTorchMode();    if (torchOn == true) {      torchOn = false;    } else {      torchOn = true;    }    setState(() {});  }  void refreshScan() {    scanController.resume();  }  // controller.resume();  // controller.pause();  // String result = await Scan.parse(imagePath);    Widget build(BuildContext context) {    return Scaffold(      body: Stack(        children: [          buildQrScanView(context),          Positioned(            child: buildAppBar(context),          ),        ],      ),    );  }  Widget buildQrScanView(BuildContext context) {    double width = MediaQuery.of(context).size.width;    double height = MediaQuery.of(context).size.height;    double scanW = width * 0.75;    double scanMY = (height - scanW) / 2.0 + scanW + 15.0;    return Container(          alignment: Alignment.center,          child: Stack(            alignment: Alignment.center,            children: [              ScanView(                controller: scanController,                // custom scan area, if set to 1.0, will scan full area                scanAreaScale: 0.75,                scanLineColor: Colors.green.shade400,                onCapture: (data) {                  // do something                  LoggerManager().debug("onCapture:${data}");                  openQrScanWEBPage(data);                },              ),              Positioned(                top: scanMY,                child: buildOption(context, scanMY),              ),            ],          ),        );  }  Widget buildAppBar(BuildContext context) {    return QrScanAppBar(      toolbarHeight: 44.0,      backgroundColor: Colors.transparent,      padding: EdgeInsets.symmetric(horizontal: 10.0),      barPadding: EdgeInsets.symmetric(vertical: 4.0),      leadingWidget: Container(        alignment: Alignment.center,        child: QrscanButton(          bGColor: ColorUtil.hexColor(0xA9A9A9),          bgHighlightedColor: ColorUtil.hexColor(0xf0f0f0),          borderColor: Colors.transparent,          onPressed: () {            navigatorBack();          },          borderRadius: 18.0,          height: 36.0,          width: 36.0,          child: ImageHelper.wrapAssetAtImages(            "icons/ic_scan_navback.png",            width: 36.0,            height: 36.0,            fit: BoxFit.fill,          ),        ),      ),      centerWidget: Text(        S.of(context).qrScan,        textAlign: TextAlign.center,        softWrap: true,        style: TextStyle(          fontSize: 17,          color: ColorUtil.hexColor(0xffffff),          fontWeight: FontWeight.w600,          fontStyle: FontStyle.nORMal,          decoration: TextDecoration.none,        ),      ),      trailingWidget: Container(        width: 32.0,        height: 32.0,      ),    );  }  Widget buildOption(BuildContext context, double originY) {    return Container(      height: ScreenUtil().screenHeight - originY,      width: ScreenUtil().screenWidth,      child: Column(        mainAxisAlignment: MainAxisAlignment.center,        crossAxisAlignment: CrossAxisAlignment.center,        children: [          Container(            width: 300.0,            child: Text(              S.of(context).qrScanBottomTip,              textAlign: TextAlign.center,              softWrap: true,              style: TextStyle(                fontSize: 15,                fontWeight: FontWeight.w500,                fontStyle: FontStyle.normal,                color: Colors.white,                decoration: TextDecoration.none,              ),            ),          ),          SizedBox(            height: 25.0,          ),          buildButtons(context),          Expanded(            child: Container(),          ),        ],      ),    );  }  Widget buildButtons(BuildContext context) {    return Row(      mainAxisAlignment: MainAxisAlignment.center,      crossAxisAlignment: CrossAxisAlignment.center,      children: [        Padding(          padding: EdgeInsets.symmetric(horizontal: 20.0),          child: QrscanButton(            bgColor: ColorUtil.hexColor(0x35fb99),            bgHighlightedColor: Colors.green.shade400,            onPressed: () {              changedTorchMode();            },            width: 100.0,            height: 50.0,            borderRadius: 25.0,            child: Text(              (torchOn                  ? S.of(context).qrScanTorchOff                  : S.of(context).qrScanTorchOn),              textAlign: TextAlign.center,              softWrap: true,              style: TextStyle(                fontSize: 14,                color: ColorUtil.hexColor(0xffffff),                fontWeight: FontWeight.w600,                fontStyle: FontStyle.normal,                decoration: TextDecoration.none,              ),            ),          ),        ),        Padding(          padding: EdgeInsets.symmetric(horizontal: 20.0),          child: QrscanButton(            bgColor: ColorUtil.hexColor(0x35fb99),            bgHighlightedColor: Colors.green.shade400,            onPressed: () {              refreshScan();            },            width: 100.0,            height: 50.0,            borderRadius: 25.0,            child: Text(              S.of(context).qrScanRefresh,              textAlign: TextAlign.center,              softWrap: true,              style: TextStyle(                fontSize: 14,                color: ColorUtil.hexColor(0xffffff),                fontWeight: FontWeight.w600,                fontStyle: FontStyle.normal,                decoration: TextDecoration.none,              ),            ),          ),        ),      ],    );  }  void navigatorBack() {    NavigatorPageRouter.pop();  }  void openQrScanWebPage(String data) {    Map<String, dynamic> args = {};    args["url"] = data;    /// true保留跳转的当前栈   false 不保留    NavigatorPageRouter.pushReplacementNamed(      RouterName.web,      arguments: args,    );  }}

三、小结

flutter开发实战-flutter二维码扫一扫功能实现,要使用到摄像头的原生的功能,使用的是插件:scan,实现自定义Appbar。

学习记录,每天不停进步。

来源地址:https://blog.csdn.net/gloryFlow/article/details/131696401

--结束END--

本文标题: flutter开发实战-flutter二维码条形码扫一扫功能实现

本文链接: https://lsjlt.com/news/390602.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • flutter开发实战-flutter二维码条形码扫一扫功能实现
    flutter开发实战-flutter二维码条形码扫一扫功能实现 flutter开发实战-flutter二维码扫一扫功能实现,要使用到摄像头的原生的功能,使用的是插件:scan 效果图如下 一、扫一...
    99+
    2023-09-02
    flutter 扫一扫 二维码 条形码
  • Flutter实现扫二维码功能
    本文实例为大家分享了Flutter实现扫二维码功能的具体代码,供大家参考,具体内容如下 首先在pubspec.yaml中添加: dependencies:   qrscan: ^0....
    99+
    2024-04-02
  • Flutter如何实现扫二维码功能
    这篇文章主要为大家展示了“Flutter如何实现扫二维码功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flutter如何实现扫二维码功能”这篇文章吧。具体内容如下首先在pubspec.yam...
    99+
    2023-06-29
  • Flutter实现二维码扫描
    本文实例为大家分享了Flutter实现二维码扫描的具体代码,供大家参考,具体内容如下 配置安卓访问权限: 1. 文件配置路径android\app\src\main\AndroidM...
    99+
    2024-04-02
  • python中扫描条形码和二维码的实现代码
    简单说明,代码太难懂,先做此记录留待来日在看 步骤: 1,pip install pyzbar安装好该模块。pyzbar模块是Python一个开源库用于扫描和识别二维码信息。 2,...
    99+
    2024-04-02
  • Android中google Zxing实现二维码与条形码扫描
    Android中google Zxing实现二维码与条形码扫描了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目的时候,老板说...
    99+
    2023-05-31
    android zxing 二维码
  • vue实现二维码扫码功能(带样式)
    需求: 利用vue实现二维码扫描; 插件: QRCodeReader; 插件下载 npm install --save vue-qrcode-reader 注意: 需要在https协...
    99+
    2024-04-02
  • Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果(推荐)
     了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目...
    99+
    2022-06-06
    仿微信 二维码扫描 google 条形码 zxing 二维 二维码 Android
  • iOS 二维码扫描相关功能实现
    写在前面 最近项目要实现相机扫描二维码功能,具体要求:1、扫描框 2、扫描动画 3、相册识别二维码 4、声音反馈。 记得之前用过三方库做过类似功能,但是也是知其然不知其所以然,然后今...
    99+
    2022-06-04
    iOS 二维码 扫描
  • jQuery如何实现二维码扫描功能
    这篇文章主要介绍了jQuery如何实现二维码扫描功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。二维码:利用图形模拟二进制0、1的概念,达...
    99+
    2024-04-02
  • 通过vue方式实现二维码扫码功能
    提示 这个插件只能在https协议下才能访问,http协议不好使,最好用vue2,vue3容易报错!!!!! 描述 通过vue的方式,实现扫码功能 参考文档:vue-qrcode-r...
    99+
    2024-04-02
  • Android开发怎么实现模仿360二维码扫描功能
    小编给大家分享一下Android开发怎么实现模仿360二维码扫描功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:一、效果图:二、框架搭建首先,下载最新...
    99+
    2023-05-30
    android
  • Angular.js实现扫码枪扫码并生成二维码
    目录前言扫码枪扫码生成二维码前言 举个例子: 商品都有自己的序列号 SN。那么当我们将这些商品打包的时候,我们就需要生成一份商品的 SN 清单,将其贴在箱子的表面以查看。但是冗长的...
    99+
    2023-03-08
    Angular.js生成二维码 Angular.js扫码枪扫码
  • 基于barcodescanner实现Android二维码扫描功能
    二维码扫描现在成为一种非常常见的APP基础功能,附录1是我曾经用过的二维码/条形码扫描开源项目,但是附录1的项目集成和二次定制比较繁琐和麻烦,因此可以发现不少人基于ZXing做了二次的开发,并贡献出这些项目,发到github上,其中barc...
    99+
    2023-05-30
    android 二维码 barcodescanner
  • Android中怎么实现二维码扫描功能
    这期内容当中小编将会给大家带来有关Android中怎么实现二维码扫描功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 开发准备1.1 android studio 安装&emsp;&e...
    99+
    2023-06-04
  • Android | 教你如何开发扫二维码功能
    目录前言官网的Demo和Sample代码体验1 开发准备1.1 android studio 安装1.2 在项目级gradle里添加华为mave...
    99+
    2022-06-06
    二维 二维码 Android
  • 如何使用HTML5实现二维码扫描功能
    本篇内容介绍了“如何使用HTML5实现二维码扫描功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   ...
    99+
    2024-04-02
  • 如何通过vue方式实现二维码扫码功能
    这篇文章主要为大家展示了“如何通过vue方式实现二维码扫码功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何通过vue方式实现二维码扫码功能”这篇文章吧。提示这个插件只能在https协议下才...
    99+
    2023-06-25
  • Angular.js如何实现扫码枪扫码并生成二维码
    这篇文章主要讲解了“Angular.js如何实现扫码枪扫码并生成二维码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Angular.js如何实现扫码枪扫码并生成二维码”吧!扫码枪扫码这个比较...
    99+
    2023-07-05
  • PHP开发点餐系统的二维码扫码功能实现方法是什么?
    PHP开发点餐系统的二维码扫码功能实现方法是什么?随着移动支付的普及,在餐饮行业中,二维码扫码点餐的方式越来越受欢迎。利用二维码扫码点餐,不仅能提高用户点餐的效率,还能减少人员成本,提升客户体验。那么在PHP开发点餐系统中,如何实现二维码扫...
    99+
    2023-11-01
    PHP开发 点餐系统 二维码扫码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作