[Flutter] 二維碼生成和掃描功能實現


二維碼生成和掃描功能實現

二維碼生成

添加依賴

 #二維碼生成
  qr_flutter: ^4.0.0

完整代碼

import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';
class QRGeneratePage extends StatefulWidget {
    QRGeneratePage({Key? key}) : super(key: key);

    @override
    State<QRGeneratePage> createState() => _QRGeneratePageState();
}
class _QRGeneratePageState extends State<QRGeneratePage> {
    String id = "2016115150";
    @override
    Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
                title: Text('二維碼生成'),
            ),
            body: QrImage(
                data: id,//掃描得到的內容
                version: QrVersions.auto,
                size: 200,
            ),
        );
    }
}

掃描功能

配置 AndroidManifest.xml文件
//與application同級
<uses-permission android:name="android.permission.CAMERA" /> <!--相機-->

添加依賴

#掃描
barcode_scan2: ^4.2.0

完整代碼

import 'package:flutter/material.dart';
import 'package:barcode_scan2/barcode_scan2.dart';
class BarcodeScanPage extends StatefulWidget {
    BarcodeScanPage({Key? key}) : super(key: key);

    @override
    State<BarcodeScanPage> createState() => _BarcodeScanPageState();
}

class _BarcodeScanPageState extends State<BarcodeScanPage> {
    //現在的時間
    var _currentTime = DateTime.now().hour;
    //控制閃光燈
    bool? flashLigh = true;

    _doBarcodeScan() async {
        //ScanOptions設置閃光燈和前后攝像頭
        var options = ScanOptions(
            autoEnableFlash: flashLigh!,
            strings: {'cancel': '取消', 'flash_on': '閃光燈開/關', 'flash_off': '閃光燈開/關'});
        //返回掃描的參數
        var result = await BarcodeScanner.scan(options: options);
        //掃描返回值的類型
        print(result.type);
        //返回參數
        print(result.rawContent);
        //格式
        print(result.format);
    }

    @override
    void initState() {
        super.initState();
        //如果早上7至晚上19點,閃光燈默認關閉
        if (_currentTime >= 7 && _currentTime <= 19) {
            setState(() {
                flashLigh = false;
            });
        }
    }
    @override
    void dispose() {
        super.dispose();
        _doBarcodeScan().cancel();//銷毀
    }
    @override
    Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
                title: Text('掃描頁面'),
            ),
            body: Center(
                child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                        ElevatedButton(onPressed: _doBarcodeScan, child: Text('開始掃描')),
                    ],
                ),
            ));
    }
}

擴展

二維碼生成和掃描可以結合實現很多功能,比如微信掃碼添加聯系人,二維碼付款等等。

都是利用掃描得到的數據進行處理,有空實現一下掃碼添加聯系人,再更新此文。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM