在Flutter中打开本机UIViewController

Tom*_*Tom 13 ios swift flutter

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

我已经实现了它,它可以根据第一个测试运行,但是我想仔细检查一下是否可以,因为我对Flutter不太熟悉,而且恐怕会使我有些混乱应用程序导航堆栈,将来可能会导致错误

因此,我已经通过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()
Run Code Online (Sandbox Code Playgroud)

我的开放方法是这样的:

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)
    }
Run Code Online (Sandbox Code Playgroud)

你怎么看?

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

Kam*_*ran 5

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

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

发生其他问题是某些特定于平台的API,例如Camera,Contacts,In-App,GameCenter等未随跨平台SDK一起提供,或者花费一些时间来获取此类API的包装,因此在所有此类情况下,您都可以使用Native API 。