Flutter InAppWebView 不允许文本字段中出现非英文内容
Flutter InAppWebView does not allow non english content in textfield
我在此处遇到 Flutter InAppWebView 插件版本 4.0.0+4 的奇怪问题 https://pub.dev/packages/flutter_inappwebview 我尝试将简单的联系我们表单加载到插件中,但发现我无法输入如果我使用非英语键盘,则将内容输入 html 输入文本字段,在我的情况下,我使用越南语键盘。如果我将键盘切换为英文键盘,那么它就可以工作了。我仔细检查了联系我们表格,并确保它在 Flutter 应用程序之外的 Chrome 浏览器上 100% 工作,甚至使用非英语键盘。我没有为插件使用任何特殊代码或设置,与 pub.dev 中提到的相同。我正在使用 Flutter 通道稳定版 v. 1.22.6
这是我的代码,以备不时之需:
class WebViewerWidget extends StatefulWidget {
final Map<String, String> metaData;
WebViewerWidget({this.metaData});
@override
_WebViewerWidgetState createState() => _WebViewerWidgetState();
}
class _WebViewerWidgetState extends State<WebViewerWidget> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
InAppWebViewController _webviewCtrl;
double progressIndicator = 0;
return Scaffold(
backgroundColor: ColorPalette.white,
appBar: PreferredSize(
child: TopNavWidget(
title: widget.metaData['title'] ?? '',
),
preferredSize: Size.fromHeight(50.0),
),
body: Builder(
builder: (BuildContext context) {
return Container(
child: Column(
children: [
Container(
child: progressIndicator < 1
? LinearProgressIndicator(
value: progressIndicator,
backgroundColor: Colors.black12,
valueColor:
AlwaysStoppedAnimation<Color>(Colors.blue),
)
: Container()),
Expanded(
child: InAppWebView(
initialUrl: widget.metaData['url'] ?? 'about:blank',
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
debuggingEnabled: true,
javaScriptEnabled: true,
useShouldInterceptAjaxRequest: true,
useShouldInterceptFetchRequest: true,
),
ios: IOSInAppWebViewOptions(),
android: AndroidInAppWebViewOptions(),
),
onWebViewCreated:
(InAppWebViewController webviewController) {
_webviewCtrl = webviewController;
},
onProgressChanged:
(InAppWebViewController controller, int progress) {
setState(() {
progressIndicator = progress / 100;
});
},
),
),
],
),
);
},
));
}
}
谢谢。
好吧,在花了几天时间解决这个问题后,我不得不放弃这个。这绝对是插件的错误,发现有人在这里有类似的问题 https://github.com/pichillilorenzo/flutter_inappwebview/issues/560
。然后我尝试了另一个名为 WebView https://pub.dev/packages/webview_flutter
的插件,它运行良好。
这已在新版本 5.0.0
(the latest version now is 5.0.5+3
中修复):使用 useHybridComposition: true
Android 特定的 webview 选项,所有与 Android 键盘相关的问题都已修复。
我在此处遇到 Flutter InAppWebView 插件版本 4.0.0+4 的奇怪问题 https://pub.dev/packages/flutter_inappwebview 我尝试将简单的联系我们表单加载到插件中,但发现我无法输入如果我使用非英语键盘,则将内容输入 html 输入文本字段,在我的情况下,我使用越南语键盘。如果我将键盘切换为英文键盘,那么它就可以工作了。我仔细检查了联系我们表格,并确保它在 Flutter 应用程序之外的 Chrome 浏览器上 100% 工作,甚至使用非英语键盘。我没有为插件使用任何特殊代码或设置,与 pub.dev 中提到的相同。我正在使用 Flutter 通道稳定版 v. 1.22.6
这是我的代码,以备不时之需:
class WebViewerWidget extends StatefulWidget {
final Map<String, String> metaData;
WebViewerWidget({this.metaData});
@override
_WebViewerWidgetState createState() => _WebViewerWidgetState();
}
class _WebViewerWidgetState extends State<WebViewerWidget> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
InAppWebViewController _webviewCtrl;
double progressIndicator = 0;
return Scaffold(
backgroundColor: ColorPalette.white,
appBar: PreferredSize(
child: TopNavWidget(
title: widget.metaData['title'] ?? '',
),
preferredSize: Size.fromHeight(50.0),
),
body: Builder(
builder: (BuildContext context) {
return Container(
child: Column(
children: [
Container(
child: progressIndicator < 1
? LinearProgressIndicator(
value: progressIndicator,
backgroundColor: Colors.black12,
valueColor:
AlwaysStoppedAnimation<Color>(Colors.blue),
)
: Container()),
Expanded(
child: InAppWebView(
initialUrl: widget.metaData['url'] ?? 'about:blank',
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
debuggingEnabled: true,
javaScriptEnabled: true,
useShouldInterceptAjaxRequest: true,
useShouldInterceptFetchRequest: true,
),
ios: IOSInAppWebViewOptions(),
android: AndroidInAppWebViewOptions(),
),
onWebViewCreated:
(InAppWebViewController webviewController) {
_webviewCtrl = webviewController;
},
onProgressChanged:
(InAppWebViewController controller, int progress) {
setState(() {
progressIndicator = progress / 100;
});
},
),
),
],
),
);
},
));
}
}
谢谢。
好吧,在花了几天时间解决这个问题后,我不得不放弃这个。这绝对是插件的错误,发现有人在这里有类似的问题 https://github.com/pichillilorenzo/flutter_inappwebview/issues/560
。然后我尝试了另一个名为 WebView https://pub.dev/packages/webview_flutter
的插件,它运行良好。
这已在新版本 5.0.0
(the latest version now is 5.0.5+3
中修复):使用 useHybridComposition: true
Android 特定的 webview 选项,所有与 Android 键盘相关的问题都已修复。