我正在使用 flutter 的“mobile_scanner”包来扫描一个屏幕中的条形码并返回主屏幕并显示结果。这是我的扫描仪屏幕代码:
Barcode? _barcode;
void _handleBarcode(BarcodeCapture barcodes) {
if (mounted) {
final barcode = barcodes.barcodes.firstOrNull;
setState(() {
_barcode = barcode;
});
Navigator.pop(context, _barcode!.rawValue);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Scan Barcode'),
),
body: Center(
child: MobileScanner(
controller: MobileScannerController(
detectionSpeed: DetectionSpeed.noDuplicates),
onDetect: _handleBarcode,
),
),
);
}
这是我用来调用扫描仪屏幕的代码:
MaterialButton(
onPressed: () async {
var result = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ScannerScreen(),
));
if (result != null) {
setState(() {
scannedBarcode = result.toString();
});
}
},
child: const Icon(Icons.barcode_reader),
),
在一瞬间,我看到了“scanner_screen”的结果,并且条形码值是正确的,问题是黑屏突然出现并覆盖了整个应用程序。
我发现,根据“mobile_scanner”包的官方文档,似乎必须处理“MobileScannerController”才能获得没有错误的刷新结果。这是我的新代码:
Barcode? _barcode;
MobileScannerController? controller =
MobileScannerController();
void _handleBarcode(BarcodeCapture barcodes) async {
if (mounted) {
final barcode = barcodes.barcodes.firstOrNull;
setState(() {
_barcode = barcode;
});
await controller!.dispose();
Navigator.pop(context, _barcode!.rawValue);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Scan Barcode'),
),
body: Center(
child: MobileScanner(
controller: controller,
onDetect: _handleBarcode,
),
),
);
}