Разработка пакета 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
}
}
Может ли какой-либо метод принудительно установить ориентацию экрана блокировки контроллера вида в коде пакета?