需求:
今天正好做生成二維碼和掃描二維碼的功能,整理一下方便以后學習,順便分享給大家。
一、生成二維碼
1、導入依賴
在 pubspec.yaml 中 dependencies 節點下添加:
# 二維碼生成 https://pub.dev/packages/qr_flutter
qr_flutter: ^3.2.0
2、引入代碼
import 'package:qr_flutter/qr_flutter.dart';
3、屬性
屬性 | 類型 | 描述 |
---|---|---|
version | int | QrVersions.auto或者介于1和40之間的值。有關限制和詳細信息,請訪問http://www.qrcode.com/en/about/version.html。 |
errorCorrectionLevel | int | 定義的值QrErrorCorrectLevel。例如:QrErrorCorrectLevel.L。 |
size | double | 二維碼的(方形)大小。如果沒有給出,將使用最短大小約束自動調整大小。 |
padding | EdgeInsets | 二維碼內邊距 |
backgroundColor | Color | 背景顏色(默認為無) |
errorStateBuilder | QrErrorBuilder | 允許您Widget在呈現QR碼時出現錯誤時顯示錯誤狀態(例如:版本太低,輸入太長等) |
foregroundColor | Color | 前景色(默認為黑色) |
gapless | bool | 添加一個額外的像素以防止間隙(默認為true) |
constrainErrorBounds | bool | 如果為true,則錯誤Widget將被限制為將要繪制QR碼的平方。如果為false,則錯誤狀態Widget將增大/縮小到所需的任何大小 |
embeddedImage | ImageProvider | 個ImageProvider限定的圖像以在QR碼的中心重疊 |
embeddedImageStyle | QrEmbeddedImageStyle | 用于設置嵌入圖像樣式的屬性 |
embeddedImageEmitsError | bool | 如果為true,則任何加載嵌入圖像的失敗都將觸發errorStateBuilder或呈現為空Container。如果為false,則將呈現QR碼,并且將忽略嵌入的圖像 |
4、代碼以及結果
Column(
crossAxisAlignment: CrossAxisAlignment.center, //居中
children: [
Text("普通二維碼"),
SizedBox(height: 20,),
QrImage(data: "這是普通二維碼",size: 100,),
Text("中間有圖片的二維碼"),
SizedBox(height: 20,),
QrImage(data: "這是中間有圖的二維碼",size: 100,embeddedImage: NetworkImage(""
"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2491682377,1019940373&fm=26&gp=0.jpg"),),
],
),
二、掃描二維碼
1、導入依賴
在 pubspec.yaml 中 dependencies 節點下添加:
# 二維碼掃描 https://pub.dev/packages/barcode_scan
barcode_scan: ^3.0.1
2、引入代碼
import 'package:barcode_scan/barcode_scan.dart';
3、代碼以及結果
class _QRCodeState extends State<QRCode> {
var textStr = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("二維碼"),
),
body: Container(
width: MediaQuery.of(context).size.width, //充滿屏幕寬度,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center, //居中
children: [
SizedBox(height: 50,),
RaisedButton(
child: Text("二維碼掃描"),
onPressed: () {
getQrcodeState().then((value) => setState(() {
this.textStr = value;
}));
},
),
SizedBox(height: 20,),
Text("掃描內容為${this.textStr}"),
],
),
),
);
}
//掃描二維碼
static Future<String> getQrcodeState() async {
try {
const ScanOptions options = ScanOptions(
strings: {
'cancel': '取消',
'flash_on': '開啟閃光燈',
'flash_off': '關閉閃光燈',
},
);
final ScanResult result = await BarcodeScanner.scan(options: options);
return result.rawContent;
} catch (e) {
}
return null;
}
}
掃描二維碼以后的結果
在這里插入圖片描述