首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter为BlinkId插件添加新的ViewController

Flutter为BlinkId插件添加新的ViewController
EN

Stack Overflow用户
提问于 2020-03-24 02:46:49
回答 1查看 347关注 0票数 1

我正在开发一个flutter应用程序,我让tp集成BlinkId plugin来扫描没有flutter插件的文档,所以我使用MethodChannel在本地代码上调用一个方法,然后我尝试添加插件的本地代码。

一切正常,插件的视图正在打开,扫描已经成功完成,但是扫描视图根本不会关闭,即使我单击close,这应该会取消扫描。

除了viewdidload之外,其他方法似乎都不起作用,但是didfinishscanning或didtabclose不起作用。

下面是我的代码:

代码语言:javascript
复制
import UIKit
import Flutter
import GoogleMaps
import Microblink
var _result: FlutterResult?

@UIApplicationMain
 @objc class AppDelegate: FlutterAppDelegate {

override func application(
 _ application: UIApplication,
 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
 ) -> Bool {
  let controller : FlutterViewController = window?.rootViewController as! FlutterViewController



  let scanIdChannel = FlutterMethodChannel(name: "native.wasfago.scanId",
                                            binaryMessenger: controller.binaryMessenger)
  scanIdChannel.setMethodCallHandler({
  (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
    // Note: this method is invoked on the UI thread.
    guard call.method == "scanId" else {
      result(FlutterMethodNotImplemented)
      return
    }
    _result = result
    self.scanId(result: result) // handle click event from flutter button
    print("clicked!")

  })
  GeneratedPluginRegistrant.register(with: self)
  return super.application(application, didFinishLaunchingWithOptions: launchOptions)
 }
 private func scanId(result: FlutterResult) {

    let viewCtrl = ViewController()
    topMostController().view.addSubview(viewCtrl.view)

 }
 func topMostController() -> UIViewController {
       var topController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController
       while ((topController?.presentedViewController) != nil) {
           topController = topController?.presentedViewController

       }
       return topController!
   }
}

class ViewController: UIViewController ,MBBlinkIdOverlayViewControllerDelegate{
   func blinkIdOverlayViewControllerDidTapClose(_ blinkIdOverlayViewController: MBBlinkIdOverlayViewController) {
    print("Closed!!!!!!!!!")
   }


   var blinkIdRecognizer : MBBlinkIdCombinedRecognizer?

   override func viewDidLoad() {
      super.viewDidLoad()
      // Valid until: 2020-06-26

      self.didTapScan()
      print("View Loaded!")
   }

   @IBAction func didTapScan() {
MBMicroblinkSDK.sharedInstance().setLicenseKey("sRwAAAEPY29tLnczNC53YXNmYWdvfIRuYWSSC81qt+lUDRzpTwtWuUsIPrIHmH2dNCTjx5qYKCfr3nKw9UVE7TIRv2nq/jDlTtqhcVZA+4dyVG8moP4DeOygPcRAkdy6L+WpNhacuZMjrTAUmGwooe3CSzaj8D8Y6Znf98SHVIE9bxdSv23SOfCQnNsoCSksIYvpjVjpT5DUExr6qSY+QqeH3EUxDR9GqIPgeiEGIXZUeOdqnIyNiGH8PYpfF9Uv79HEacBncbHDMwfzZTSXc2VYttRgae1QAA9h5hAtUc8VhH1g")
    /** Create BlinkID recognizer */
    self.blinkIdRecognizer = MBBlinkIdCombinedRecognizer()
    self.blinkIdRecognizer?.returnFullDocumentImage = true;

    /** Create settings */
    let settings : MBBlinkIdOverlaySettings = MBBlinkIdOverlaySettings()

    /** Crate recognizer collection */
    let recognizerList = [self.blinkIdRecognizer!]
    let recognizerCollection : MBRecognizerCollection = MBRecognizerCollection(recognizers: recognizerList)

    /** Create your overlay view controller */
    let blinkIdOverlayViewController : MBBlinkIdOverlayViewController = MBBlinkIdOverlayViewController(settings: settings, recognizerCollection: recognizerCollection, delegate: self)

    /** Create recognizer view controller with wanted overlay view controller */
    let recognizerRunneViewController : UIViewController = MBViewControllerFactory.recognizerRunnerViewController(withOverlayViewController: blinkIdOverlayViewController)
    recognizerRunneViewController.modalPresentationStyle = .fullScreen

    /** Present the recognizer runner view controller. You can use other presentation methods as well (instead of presentViewController) */
    self.topMostController().present(recognizerRunneViewController, animated: true, completion: nil)

//    let navigationController = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController
 //   navigationController?.pushViewController(recognizerRunneViewController, animated: true)


}

    func topMostController() -> UIViewController {
      var topController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController
      while ((topController?.presentedViewController) != nil) {
        topController = topController?.presentedViewController
      }
      return topController!
    }
    func blinkIdOverlayViewControllerDidFinishScanning(_ blinkIdOverlayViewController: MBBlinkIdOverlayViewController, state: MBRecognizerResultState) {
        /** This is done on background thread */
        print("success scaning");          

    }

}
EN

回答 1

Stack Overflow用户

发布于 2020-04-03 01:36:23

您应该删除中间的ViewController实例,并将recognizerRunneViewController (负责ID扫描)呈现在UINavigationViewController之上,或者直接通过topMostViewController以模态方式呈现出来。

这里有一个指向github问题的链接,它帮助解决了这个问题:https://github.com/BlinkID/blinkid-ios/issues/294

编辑:来自2020年6月的BlinkID。支持在Flutter应用程序中与官方插件的开箱即用集成。该插件可在以下位置获得:https://github.com/blinkid/blinkid-flutter

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60819797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档