我有一个在 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()
我的打开方法是这样的:
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)
}
你觉得怎么样?
非常感谢您的任何建议,并提前感谢您的帮助!
在创建跨平台应用程序时使用本机 API 是完全可以的,但要确保没有其他方法可以实现您的目标。很多时候(当跨平台引擎/sdk 是新的时),除了使用本机代码来完成功能之外,您别无选择。
不确定您的目标,但跨平台引擎/sdk(例如,
Flutter
)的常见问题是第三方SDK/API(例如,Chartboost, Stripe, Twilio
)需要一些时间才能转换为您所在的引擎/sdk使用 so,虽然它不可用,但你别无选择,只能本地调用这些 API。
发生的其他问题是一些特定于平台的 API,例如相机、联系人、应用内、GameCenter 等不附带跨平台 SDK,或者需要时间为此类 API 获取一些包装器,因此在所有这些情况下,您可以使用 Native API 的。
正如 Kamran 所建议的,在你的 flutter 应用程序中使用 Native 代码是可以的。特别是在任何特定功能不可行或 SDK/API 尚不可用于 flutter 的情况下。 Flutter 文档提供了有关在 Flutter 应用程序中使用本机代码的详细信息。阅读文档将有助于理解架构。 这是官方文档的链接
对于这个特定问题,这可能不是您想要的,但您也可以使用 flutter 之前引入的 PlatformViews。 PlatformViews 允许您将本机视图添加到小部件层次结构中。您将能够向 flutter UI 添加自定义视图模块。 Here是一个很棒的博客,可以帮助您了解如何实现 PlatformViews。
希望这能让大家更清楚地了解如何充分利用 Flutter 的潜力。
PS:我是在堆栈溢出上发布答案的新手。如果有任何错误,请告诉我,以便我纠正。
你可以实现你的目标!
我确实有同样的要求,但就我而言,我想在颤振中显示相机预览层。 如果您阅读以下 GitHub 存储库
https://github.com/yushulx/flutter-barcode-qr-code-scanner/tree/main
通过阅读代码,您可能会了解如何在 flutter 中使用 swift 视图控制器。
祝你好运!
有一个 AndroidView / UiKitView 可以准确实现你想要做的事情。您可以在本教程中阅读更多相关信息:https://60devs.com/how-to-add-native-code-to-flutter-app-using-platform-views-ios.html
(免责声明,我对 Flutter 还很陌生,我不确定这是新的还是稳定的。从未使用过它,只是在研究过程中发现的。)