Flutter InAppWebView 软键盘问题

Flutter InAppWebView 软键盘问题,第1张

Flutter InAppWebView 如何一进入就默认打开软件盘

webView和软件盘的问题,网上有很多很多的文章。找了很多,有用的没用的一大堆。

今天主要说一下 flutter InAppWebView中如何已进入就调去软键盘。

H5里面,无论是aotoFocus还时document.getElementById('xxx').focus();

在iOS还是android上都是无效的。当时就凉凉,不过解决这个问题iOS还是有办法的。

iOS

看了这个老哥的文章,分分钟解决了 blog.csdn.net/c_furong/ar…

在flutter iOS文件,由于InAppWebView用的是WKWebView,在appDelegate里面,执行下方法即可。代码是oc的 flutter已经给我们见好了桥文件,自己写个oc的class 转一下,在appDelegate调用一下即可

Andorid

接下来就是安卓,找了很多文章,最后终结于只能通过js的hander处理。InAppWebView与js的调用在这就好说了,只讲键盘的事。

1、调键盘,一定要用原生来调。那怎么用flutter里面直接掉原生的方法呢?

第一时间在 InAppWebViewController Api中找,找到了下面两个方法。

requestFocusNodeHref()
clearFocus()

clearFocus()一目了然,关闭键盘的。那requestFocusNodeHref()是干什么用的呢。

官方文档:请求回调得到 RequestFocusNodeHrefResult对象,在看看RequestFocusNodeHrefResult呢,貌似和键盘啥的没啥关系。那我要不把requestFocusNodeHref()的方法改了呢。直接open我的android studio。 这个这个回掉的地方,直接给改了。在我心里,requestFocusNodeHref()方法就应该是请求d出键盘的,尽然他不是,那就让他是就好了。

找到InAppWebViewMethodHander。413行,直接换掉。

收到js软键盘打开的请求,直接来个controller.requestFocusNodeHref();搞定。

附上代码:收工!

case "requestFocusNodeHref":
  if (webView != null) {
      try {
        webView.requestFocus();
        InputMethodManager inputManager =
                (InputMethodManager) webView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputManager != null) {
          inputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,
                  InputMethodManager.HIDE_IMPLICIT_ONLY);
          result.success(true);
        }
      } catch (Exception e) {
        result.success(null);
      }
  } else {
    result.success(null);
  }
  break;

掘金地址:掘金https://juejin.cn/post/7028768149394685965/ 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/996479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存