首页 > 解决方案 > 在 Flutter 中打开原生 UIViewController

问题描述

我有一个在 Flutter 中开发的应用程序,它有一个 UIViewController 必须在本机 IOS 中实现(没有其他解决方法,这是必须的)

我已经实现了它,它根据第一次测试工作,但我想根据你的意见仔细检查它是否正常,因为我在 Flutter 方面没有那么丰富的经验,而且我恐怕有点搞砸了未来可能导致错误的应用导航堆栈

所以,我已经通过 MethodChannel 实现了它。我有一个方法,从“Flutter side”调用。我不会在这里粘贴我的 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)
    }

你怎么看?

任何建议都非常感谢,并提前感谢您的帮助!

标签: iosswiftflutter

解决方案


在创建跨平台应用程序时使用 Native API 完全没问题,但要确保没有其他方法可以实现您的目标。很多时候(当跨平台引擎/sdk 是新的时)除了使用本机代码来完成您的功能之外,您别无选择。

不确定您的目标,但跨平台引擎/sdk(例如,Flutter)的常见问题是第三方 SDK/API(例如,Chartboost, Stripe, Twilio)需要一些时间才能转换为您正在使用的引擎/sdk,所以当它不可用时除了本机调用这些 API 之外别无选择。

发生的其他问题是某些特定于平台的 API,例如相机、联系人、应用内、GameCenter 等没有随跨平台 SDK 一起提供,或者需要时间来获取此类 API 的一些包装器,因此在所有这些情况下,您都可以使用本机 API .


推荐阅读