二維碼生成和掃描功能實現
二維碼生成
添加依賴
#二維碼生成
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('開始掃描')),
],
),
));
}
}
擴展
二維碼生成和掃描可以結合實現很多功能,比如微信掃碼添加聯系人,二維碼付款等等。
都是利用掃描得到的數據進行處理,有空實現一下掃碼添加聯系人,再更新此文。
