Разработка пакета флаттера, как заблокировать ориентацию экрана в контроллере iOS? - PullRequest
0 голосов
/ 11 июня 2019

Разработка пакета Flutter для камеры со штрих-кодом. Я использую метод channel для вызова встроенного viewController, представленного в представлении flutter. Не удается заблокировать ориентацию экрана в собственном контроллере вида.

Я уже пробовал использовать на платформе флаттера

SystemChrome.setPreferredOrientations([
  ...
]);

Работает только флаттер. Собственный контроллер представления все еще не затронут.

Другое решение, которое я пробовал на нативном.

 if let delegate = UIApplication.shared.delegate as? AppDelegate {
     delegate.orientationLock = orientation
 }

Проблема в том, что я не могу привести «UIApplicationDelegate» к «AppDelegate», поскольку «AppDelegate» не входит в то же целевое членство.

В файле плагина swift показано, как я представляю контроллер представления.

public static func register(with registrar: FlutterPluginRegistrar) {
        let channel = FlutterMethodChannel(name: "majascan", binaryMessenger: registrar.messenger())
        let instance = SwiftMajascanPlugin()
        registrar.addMethodCallDelegate(instance, channel: channel)
        if let delegate = UIApplication.shared.delegate , let window = delegate.window, let root = window?.rootViewController {
            instance.hostViewController = root
            instance.registrar = registrar
        }
    }

    public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
        switch call.method {
        case "scan":
            self.result = result
            let scanController = MAJAScannerController()
            scanController.delegate = self
            let navigationController = UINavigationController(rootViewController: scanController)

            if let arguDictinary = call.arguments as? NSDictionary {
               scanController.argumentDictionary = arguDictinary
            }

            if hostViewController != nil {
                let backIconKey = registrar.lookupKey(forAsset: "assets/back.png", fromPackage: "majascan")
                if let backIconPath = Bundle.main.path(forResource: backIconKey, ofType: nil) {
                    scanController.backImage = UIImage(imageLiteralResourceName: backIconPath)
                }
                let flashlightKey = registrar.lookupKey(forAsset: "assets/flashlight.png", fromPackage: "majascan")
                if let flashlightPath = Bundle.main.path(forResource: flashlightKey, ofType: nil) {
                    scanController.flashlightImage = UIImage(imageLiteralResourceName: flashlightPath)
                }

                hostViewController.present(navigationController, animated: true, completion: nil)
            }
        default:
            result(FlutterMethodNotImplemented)
            break
        }
    }

Может ли какой-либо метод принудительно установить ориентацию экрана блокировки контроллера вида в коде пакета?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...