【问题标题】:Bluetooth Keyboard does not work on Flutter webview. (iOS + Hardware Keyboard)蓝牙键盘在 Flutter webview 上不起作用。 (iOS + 硬件键盘)
【发布时间】:2021-09-06 12:38:09
【问题描述】:

我们开发了一个应用程序,我们需要在其中打开一个 WebView 来向用户显示一个文本编辑器。用户与编辑器交互后,我们需要从 URL 中获取一些数据。

为了展示 WebView,我们使用了 webview_flutter: ^2.0.8 包,问题是一些用户想要将他们的蓝牙键盘连接到他们的设备上,而 webview 部分无法识别 iOS 上的蓝牙键盘。

首先,我们认为这是由于蓝牙的某些权限,但显然情况并非如此,因为我们添加了这些权限并且没有任何改变,除此之外,文本字段和文本编辑器在其他部分完美运行在应用程序中,问题出在 iOS 上运行的 webview 上。

由于我们需要 URL 数据,我按照link 中描述的步骤进行操作。然后我以与example 类似的方式将 webview 作为模态打开,但无论如何它无法识别键盘。

接下来我尝试将 FlutterViewController 包装在 UINavigationController 中,以便导航到我创建的 WebViewController,但是当这行被执行时:

让控制器:FlutterViewController = window?.rootViewController 作为! FlutterViewController

触发了这个错误:

无法将“UINavigationController”(0x11732c8f0) 类型的值转换为“FlutterViewController”(0x111370520)。

我是 Swift/iOS 的新手,所以我不知道如何解决这个问题。

有没有办法实例化或获取FlutterViewControllerBinaryMessenger 来创建FlutterMethodChannel

你知道以不同方式打开 web 视图的包吗?因为我也尝试过其他包,但显然它们都和 webview_flutter 做的一样,也就是说,他们使用UiKitView,这对我来说不适用于这个问题。

这里是一个 repo,我尝试解决这个问题:https://github.com/jorgesarabia/flutter_hc_webview_example

谢谢!

【问题讨论】:

    标签: ios flutter


    【解决方案1】:

    在此 PR github 中修复了错误,但尚未发布。

    你可以使用这个临时解决方案(在你的IOS项目文件ios/Runner/AppDelegate.swift):

    extension FlutterViewController {
        open override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
            super.pressesBegan(presses, with: event)
        }
        
        open override func pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
            super.pressesEnded(presses, with: event)
        }
        
        open override func pressesCancelled(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
            super.pressesCancelled(presses, with: event)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 2017-05-09
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多