flutter 二维码扫描 空安全
时间: 2023-07-29 20:10:43 浏览: 166
在 Flutter 2.0 之后,Dart 默认启用了空安全(Null Safety),因此在使用二维码扫描插件时需要使用空安全的 API。
对于 `qr_code_scanner` 插件,可以使用 `qr_code_scanner_nullsafety` 包,其使用方式与原始插件基本相同,只是 API 有所改变。以下是一个简单的示例:
1. 添加 `qr_code_scanner_nullsafety` 插件到 `pubspec.yaml` 文件中:
```
dependencies:
qr_code_scanner_nullsafety: ^0.5.2
```
2. 导入 `qr_code_scanner_nullsafety` 包:
```
import 'package:qr_code_scanner_nullsafety/qr_code_scanner_nullsafety.dart';
```
3. 创建一个 `QRViewController` 和一个 `QRView`:
```
QRViewController? controller;
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
@override
Widget build(BuildContext context) {
return QRView(
key: qrKey,
onQRViewCreated: _onQRViewCreated,
);
}
void _onQRViewCreated(QRViewController newController) {
controller = newController;
controller!.scannedDataStream.listen((scanData) {
// 处理扫描到的二维码
});
}
```
注意,`QRViewController` 类型需要加上问号 `?`,表示这个对象可能为空。在 `_onQRViewCreated()` 方法中,也需要对 `controller` 进行非空判断,确保它不为空。
对于 `barcode_scan` 插件,可以使用 `barcode_scan_null_safety` 包,使用方式与原始插件类似。以下是一个简单的示例:
1. 添加 `barcode_scan_null_safety` 插件到 `pubspec.yaml` 文件中:
```
dependencies:
barcode_scan_null_safety: ^2.0.1
```
2. 导入 `barcode_scan_null_safety` 包:
```
import 'package:barcode_scan_null_safety/barcode_scan_null_safety.dart';
```
3. 调用 `scan()` 方法并处理返回的数据:
```
Future<void> scan() async {
String barcode = await BarcodeScanner.scan();
// 处理扫描到的二维码
}
```
对于 `barcode_scan_null_safety`,`scan()` 方法返回的类型为非空的 `Future<String>`,不需要进行空值检查。
阅读全文