Android 颤振WebView软键盘在输入模糊时不隐藏

Android 颤振WebView软键盘在输入模糊时不隐藏,android,flutter,android-softkeyboard,blur,Android,Flutter,Android Softkeyboard,Blur,Android上的FlitterWebView插件似乎存在着一个长期存在的问题——如果有什么依据的话。我也遇到过这种情况——在一个Webview对话框中,我有一个输入框,当聚焦时,会出现Android软键盘。然而,当输入框失去焦点时,或者甚至当它从DOM树中移除时,它不会自动消失。我非常感谢任何能够提出解决方案的人。我尝试了讨论中提到的各种想法,包括发布SystemChannels.textInput.invokeMethod('textInput.hide')从省道代码后面 我唯一能想到的另一

Android上的FlitterWebView插件似乎存在着一个长期存在的问题——如果有什么依据的话。我也遇到过这种情况——在一个Webview对话框中,我有一个输入框,当聚焦时,会出现Android软键盘。然而,当输入框失去焦点时,或者甚至当它从DOM树中移除时,它不会自动消失。我非常感谢任何能够提出解决方案的人。我尝试了讨论中提到的各种想法,包括发布
SystemChannels.textInput.invokeMethod('textInput.hide')从省道代码后面

我唯一能想到的另一种尝试方式是编写一个小的Flutter安卓“插件”,它试图通过安卓API直接隐藏软键盘,我认为这应该可以工作。如果有人能告诉我做这件事所需的Kotlin代码,我将不胜感激


下面是我如何构建应用程序UI——整个小部件树

Route makeWebView(RouteSettings settings)
{
 return new PageRouteBuilder
 (
  pageBuilder:(BuildContext context,Animation<double> 
  animation,Animation<double> secondaryAnimation)
  {
   return SafeArea
   (
    child:Listener
    (
     child: SizedBox.expand
     (
      child:WebView
      (
       debuggingEnabled:true, 
       initialUrl:'',
       javascriptMode:JavascriptMode.unrestricted,
       onWebViewCreated:registerController,
       javascriptChannels:Set.from
      ([JavascriptChannel(name:'JSBridge',
                              onMessageReceived:handleMessage)]),
       ),
      ),
     )
    );
  });
 }
Route makeWebView(路由设置)
{
返回新的PageRouteBuilder
(
pageBuilder:(构建上下文,动画
动画,动画二级动画)
{
返回安全区
(
孩子:听众
(
子项:SizedBox.expand
(
孩子:网络视图
(
debuggingEnabled:true,
初始URL:“”,
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:registerController,
javascriptChannels:Set.from
([JavascriptChannel(名称:'JSBridge',
onMessageReceived:handleMessage)],
),
),
)
);
});
}

修复程序最终根据完成,我已经对其进行了测试。它起作用了

要启用修复,您需要启用混合合成,即:
SurfaceAndroidWebView

import 'dart:io';

import 'package:webview_flutter/webview_flutter.dart';

class WebViewExample extends StatefulWidget {
  @override
  WebViewExampleState createState() => WebViewExampleState();
}

class WebViewExampleState extends State<WebViewExample> {
  @override
  void initState() {
    super.initState();
    // Enable hybrid composition.
    if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
  }

  @override
  Widget build(BuildContext context) {
    return WebView(
      initialUrl: 'https://flutter.dev',
    );
  }
}

链接到文档:

修复程序最终根据发布,我已经对其进行了测试。它起作用了

要启用修复,您需要启用混合合成,即:
SurfaceAndroidWebView

import 'dart:io';

import 'package:webview_flutter/webview_flutter.dart';

class WebViewExample extends StatefulWidget {
  @override
  WebViewExampleState createState() => WebViewExampleState();
}

class WebViewExampleState extends State<WebViewExample> {
  @override
  void initState() {
    super.initState();
    // Enable hybrid composition.
    if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
  }

  @override
  Widget build(BuildContext context) {
    return WebView(
      initialUrl: 'https://flutter.dev',
    );
  }
}

文档链接:

请分享您的小部件树,您将WebView添加到小部件树的位置和方式……我已修改了我的问题。我应该提到的是,我从WidgetsApp开始,而不是MaterialApp。请分享您的小部件树,您在哪里以及如何将WebView添加到小部件树中……我修改了我的问题。我应该提到的是,我从WidgetsApp开始,而不是MaterialApp