作者:阿斌之摩羯座 | 来源:互联网 | 2023-09-05 15:20
我们开发了一个应用程序,我们需要在其中打开一个WebView来向用户显示一个文本编辑器。用户与编辑器交互后,我们需要从URL中获取一些数据。为了显示WebView,
我们开发了一个应用程序,我们需要在其中打开一个 WebView 来向用户显示一个文本编辑器。用户与编辑器交互后,我们需要从 URL 中获取一些数据。
为了显示 WebView,我们使用包 webview_flutter: ^2.0.8,问题是一些用户想要将他们的蓝牙键盘连接到他们的设备,而 webview 部分无法识别 iOS 上的蓝牙键盘。
首先,我们认为这是由于蓝牙的一些许可,但显然事实并非如此,因为我们添加了这些许可并且没有任何变化,除此之外,文本字段和文本编辑器在应用程序的其他部分完美运行,问题仅在iOS上运行的webview上。
由于我们需要 URL 数据,我按照此链接中描述的步骤操作。然后我以与本示例中所做的类似的方式将 webview 作为模式打开,但无论如何它无法识别键盘。
我尝试的下一件事是将FlutterViewController包装在UINavigationController 中,以便我可以导航到我创建的WebViewController,但是当执行此行时:
让控制器: FlutterViewCOntroller= window?.rootViewController as!颤振视图控制器
触发此错误:
无法将“UINavigationController”(0x11732c8f0)类型的值转换为“FlutterViewController”(0x111370520)。
我是 Swift/iOS 的新手,所以我不知道如何解决这个问题。
有没有一种方法来实例或获取BinaryMessenger
的FlutterViewController
创造FlutterMethodChannel
?
您知道以不同方式打开 webview 的包吗?因为我也尝试过其他包,但显然它们都和 webview_flutter 做的一样,也就是说,他们使用的UiKitView
那个对我来说不适合这个问题。
这里有一个 repo,我尝试解决这个问题:https : //github.com/jorgesarabia/flutter_hc_webview_example
谢谢!
回答
在这个 PR 中github错误已修复,但尚未发布。
您可以使用此临时解决方案(在您的 IOS 项目文件中ios/Runner/AppDelegate.swift
):
extension FlutterViewController {
open override func pressesBegan(_ presses: Set, with event: UIPressesEvent?) {
super.pressesBegan(presses, with: event)
} open override func pressesEnded(_ presses: Set, with event: UIPressesEvent?) {
super.pressesEnded(presses, with: event)
} open override func pressesCancelled(_ presses: Set, with event: UIPressesEvent?) {
super.pressesCancelled(presses, with: event)
}
}