The QR Code Scanner package for Appeto SDK.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

139 lignes
5.2 KiB

  1. //
  2. // QRView.swift
  3. // flutter_qr
  4. //
  5. // Created by Julius Canute on 21/12/18.
  6. //
  7. import Foundation
  8. import MTBBarcodeScanner
  9. public class QRView:NSObject,FlutterPlatformView {
  10. @IBOutlet var previewView: UIView!
  11. var scanner: MTBBarcodeScanner?
  12. var registrar: FlutterPluginRegistrar
  13. var channel: FlutterMethodChannel
  14. public init(withFrame frame: CGRect, withRegistrar registrar: FlutterPluginRegistrar, withId id: Int64){
  15. self.registrar = registrar
  16. previewView = UIView(frame: frame)
  17. channel = FlutterMethodChannel(name: "net.touchcapture.qr.flutterqr/qrview_\(id)", binaryMessenger: registrar.messenger())
  18. }
  19. func isCameraAvailable(success: Bool) -> Void {
  20. if success {
  21. do {
  22. try scanner?.startScanning(resultBlock: { [weak self] codes in
  23. if let codes = codes {
  24. for code in codes {
  25. var typeString: String;
  26. switch(code.type) {
  27. case AVMetadataObject.ObjectType.aztec:
  28. typeString = "AZTEC"
  29. case AVMetadataObject.ObjectType.code39:
  30. typeString = "CODE_39"
  31. case AVMetadataObject.ObjectType.code93:
  32. typeString = "CODE_93"
  33. case AVMetadataObject.ObjectType.code128:
  34. typeString = "CODE_128"
  35. case AVMetadataObject.ObjectType.dataMatrix:
  36. typeString = "DATA_MATRIX"
  37. case AVMetadataObject.ObjectType.ean8:
  38. typeString = "EAN_8"
  39. case AVMetadataObject.ObjectType.ean13:
  40. typeString = "EAN_13"
  41. case AVMetadataObject.ObjectType.itf14:
  42. typeString = "ITF"
  43. case AVMetadataObject.ObjectType.pdf417:
  44. typeString = "PDF_417"
  45. case AVMetadataObject.ObjectType.qr:
  46. typeString = "QR_CODE"
  47. case AVMetadataObject.ObjectType.upce:
  48. typeString = "UPC_E"
  49. default:
  50. return
  51. }
  52. guard let stringValue = code.stringValue else { continue }
  53. let result = ["code": stringValue, "type": typeString]
  54. self?.channel.invokeMethod("onRecognizeQR", arguments: result)
  55. }
  56. }
  57. })
  58. } catch {
  59. NSLog("Unable to start scanning")
  60. }
  61. } else {
  62. UIAlertView(title: "Scanning Unavailable", message: "This app does not have permission to access the camera", delegate: nil, cancelButtonTitle: nil, otherButtonTitles: "Ok").show()
  63. }
  64. }
  65. public func view() -> UIView {
  66. channel.setMethodCallHandler({
  67. [weak self] (call: FlutterMethodCall, result: FlutterResult) -> Void in
  68. switch(call.method){
  69. case "setDimensions":
  70. let arguments = call.arguments as! Dictionary<String, Double>
  71. self?.setDimensions(width: arguments["width"] ?? 0,height: arguments["height"] ?? 0)
  72. case "flipCamera":
  73. self?.flipCamera()
  74. case "toggleFlash":
  75. self?.toggleFlash()
  76. case "pauseCamera":
  77. self?.pauseCamera()
  78. case "resumeCamera":
  79. self?.resumeCamera()
  80. default:
  81. result(FlutterMethodNotImplemented)
  82. return
  83. }
  84. })
  85. return previewView
  86. }
  87. func setDimensions(width: Double, height: Double) -> Void {
  88. previewView.frame = CGRect(x: 0, y: 0, width: width, height: height)
  89. if let sc: MTBBarcodeScanner = scanner {
  90. if let previewLayer = sc.previewLayer {
  91. previewLayer.frame = previewView.bounds;
  92. }
  93. } else {
  94. scanner = MTBBarcodeScanner(previewView: previewView)
  95. MTBBarcodeScanner.requestCameraPermission(success: isCameraAvailable)
  96. }
  97. }
  98. func flipCamera(){
  99. if let sc: MTBBarcodeScanner = scanner {
  100. if sc.hasOppositeCamera() {
  101. sc.flipCamera()
  102. }
  103. }
  104. }
  105. func toggleFlash(){
  106. if let sc: MTBBarcodeScanner = scanner {
  107. if sc.hasTorch() {
  108. sc.toggleTorch()
  109. }
  110. }
  111. }
  112. func pauseCamera() {
  113. if let sc: MTBBarcodeScanner = scanner {
  114. if sc.isScanning() {
  115. sc.freezeCapture()
  116. }
  117. }
  118. }
  119. func resumeCamera() {
  120. if let sc: MTBBarcodeScanner = scanner {
  121. if !sc.isScanning() {
  122. sc.unfreezeCapture()
  123. }
  124. }
  125. }
  126. }