Откройте нативный UIViewController во флаттере - программирование

Откройте нативный UIViewController во флаттере

У меня есть приложение, которое я разрабатываю во Flutter, и у него есть один UIViewController, который должен быть реализован в собственном IOS (другого обходного пути нет, это необходимо)

Я реализовал его, он работает в соответствии с первыми тестами, но я хотел бы еще раз проверить, насколько это хорошо, по вашему мнению, поскольку я не настолько опытен во Флаттере, и я боюсь, что-то напутает в моем Навигация по стеку приложения, которая может вызвать ошибки в будущем.

Итак, я реализовал это с помощью MethodChannel. У меня есть метод, который вызывается со стороны флаттера. Я не вставляю свои вещи, связанные с MethodChannel, здесь, потому что они тривиальны.

В моем AppDelegate didFinishLaunchingWithOptions я добавил это:

let flutterViewController = FlutterViewController()
    self.navigationController = UINavigationController(rootViewController: flutterViewController)
    self.navigationController?.isNavigationBarHidden = true

    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window.rootViewController = self.navigationController
    self.window.makeKeyAndVisible()

И мой открытый метод, как это:

private func openNativeUI(result: FlutterResult) {
        let sb = UIStoryboard(name: "Main", bundle: nil)
        let uiController = sb.instantiateViewController(withIdentifier: "nativeui")

        self.navigationController?.pushViewController(uiController, animated: true)

        result(true)
    }

Как вы думаете?

Любой совет высоко ценится и спасибо за вашу помощь заранее!

4b9b3361

Ответ 1

При создании кроссплатформенного приложения вполне нормально использовать Native API, но убедитесь, что нет другого пути для достижения вашей цели. Много раз (когда кроссплатформенный движок /SDK является новым) у вас нет другого выбора, кроме как использовать нативный код для завершения своей функциональности.

Не уверен в своей цели, но общая проблема с кроссплатформенным движком /sdk (например, Flutter) заключается в том, что сторонний SDK/API (например, Chartboost, Stripe, Twilio) занимает некоторое время для преобразования в тот движок /sdk, который вы используете поэтому, пока он недоступен, у вас нет другого выбора, кроме как вызывать эти API изначально.

Другая проблема возникает из-за того, что некоторые API для конкретной платформы, например, Camera, Contacts, In-App, GameCenter и т.д., Не поставляются вместе с кроссплатформенным SDK, или требуется некоторое время, чтобы получить какую-нибудь оболочку для такого API, поэтому во всех таких случаях вы можете использовать Native API.,