在我的Flutter代码中,我使用flutter_inappwebview在应用程序内打开一个网页,以便用户可以输入一些数据并提交,在某些情况下我无法检测到键盘没有出现,因此用户无法输入数据, Android 和 iOS 都会发生这种情况。我该怎么办?
InAppWebView(
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(),
android: AndroidInAppWebViewOptions(useHybridComposition: true),
ios: IOSInAppWebViewOptions(allowsInlineMediaPlayback: true)),
onLoadStart: (controller, url) {
if (url.toString() == state.paymentState.redirectBackUrl) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const Scaffold(body: Center(child: Loader()), backgroundColor: Colors.white)));
StoreProvider.of<AppState>(navigatorKey.currentContext).dispatch(CheckPayment());
}
},
onLoadStop: (controller, url) async {},
onTitleChanged: (controller, title) {},
onReceivedServerTrustAuthRequest: (controller, challenge) async {
return ServerTrustAuthResponse(action: ServerTrustAuthResponseAction.PROCEED);
},
onWebViewCreated: (controller) async {
await controller.postUrl(
url: Uri(
scheme: url['scheme'],
host: url['host'],
port: int.parse(url['port']),
path: url['path']),
postData: postData);
controller.addJavaScriptHandler(handlerName: 'callBackUrl', callback: (args) {});
},
)
我发现了问题,键盘出现在 InAppWebView 小部件后面,所以我将
InAppWebView
小部件与 Expanded
包裹在 Column
中,并在其下方添加:
SizedBox(height: MediaQuery.of(context).viewInsets.bottom / 30)
用于获取窗口底部被键盘等 UI 元素遮挡的部分的大小。 这将减少被
InAppWebView
小部件遮挡的高度。