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