Refactor ScannerView to differentiate navigation between QR code and barcode detail views; implement a method for converting barcode types to readable strings, enhancing user experience and data handling.

main
v504 2 months ago
parent 6e08511157
commit a58e0dddde

@ -167,12 +167,22 @@ struct ScannerView: View {
NavigationLink( NavigationLink(
destination: Group { destination: Group {
if let historyItem = selectedHistoryItem { if let historyItem = selectedHistoryItem {
QRCodeDetailView(historyItem: historyItem) //
.onDisappear { if historyItem.dataType == DataType.qrcode.rawValue {
// QRCodeDetailView(historyItem: historyItem)
logInfo("🔄 从详情页返回,重新开始扫描", className: "ScannerView") .onDisappear {
resetToScanning() //
} logInfo("🔄 从二维码详情页返回,重新开始扫描", className: "ScannerView")
resetToScanning()
}
} else {
BarcodeDetailView(historyItem: historyItem)
.onDisappear {
//
logInfo("🔄 从条形码详情页返回,重新开始扫描", className: "ScannerView")
resetToScanning()
}
}
} }
}, },
isActive: $navigateToDetail isActive: $navigateToDetail

@ -309,7 +309,7 @@ class ScannerViewModel: NSObject, ObservableObject, AVCaptureMetadataOutputObjec
if let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject, if let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject,
let stringValue = readableObject.stringValue { let stringValue = readableObject.stringValue {
let codeType = readableObject.type.rawValue let codeType = getBarcodeTypeString(from: readableObject.type)
let bounds = readableObject.bounds let bounds = readableObject.bounds
let detectedCode = DetectedCode( let detectedCode = DetectedCode(
@ -390,4 +390,43 @@ class ScannerViewModel: NSObject, ObservableObject, AVCaptureMetadataOutputObjec
device.unlockForConfiguration() device.unlockForConfiguration()
} }
} }
// MARK: -
///
private func getBarcodeTypeString(from metadataType: AVMetadataObject.ObjectType) -> String {
switch metadataType {
case .ean8:
return "EAN-8"
case .ean13:
return "EAN-13"
case .upce:
return "UPC-E"
case .code39:
return "Code 39"
case .code93:
return "Code 93"
case .code128:
return "Code 128"
case .itf14:
return "ITF-14"
case .pdf417:
return "PDF417"
case .qr:
return "QR Code"
case .dataMatrix:
return "Data Matrix"
case .aztec:
return "Aztec"
default:
//
let typeString = metadataType.rawValue
if typeString.contains("org.gs1.") {
// org.gs1.
let cleanType = typeString.replacingOccurrences(of: "org.gs1.", with: "")
return cleanType.uppercased()
}
return typeString
}
}
} }
Loading…
Cancel
Save