遇到一個很奇怪的問題,flutter在自己的手機上苍柏,textfield可以正常獲取焦點,但是軟鍵盤無法正常彈出姜贡。手機型號是realMe ,系統(tǒng)是12试吁。試了其他的品牌的手機,均可以正常彈出軟鍵盤楼咳。
異常日志:W/InputMethodManager: Ignoring showSoftInput() as view=io.flutter.embedding.android.FlutterView is not served.
最終解決方案
在Flutter Android工程包的MainActivity增加如下代碼
@Override
protected void onResume() {
super.onResume();
FlutterView flutterView = findViewById(FLUTTER_VIEW_ID);
flutterView.requestFocus();
}
其他
Flutter軟鍵盤異常的問題很多熄捍,我的解決方案只是針對我遇到的報錯,有些其他的原因母怜,也會導(dǎo)致軟鍵盤異常余耽。比如未開啟硬件加速,或者webview軟鍵盤不彈出苹熏,都是其他的解決方案碟贾。
問題排查回顧
首先看了打印的異常日志:
W/InputMethodManager: Ignoring showSoftInput()
as view=io.flutter.embedding.android.FlutterView
is not served.
從日志來看,貌似顯示軟鍵盤的方法沒有執(zhí)行成功轨域。
于是進(jìn)入InputMethodManager查看源碼:
if (!hasServedByInputMethodLocked(view)) {
Log.w(TAG, "Ignoring showSoftInput() as view=" + view + " is not served.");
return false;
}
/**
* Returns {@code true} when the given view has been served by Input Method.
*/
private boolean hasServedByInputMethodLocked(View view) {
final View servedView = getServedViewLocked();
return (servedView == view
|| (servedView != null && servedView.checkInputConnectionProxy(view)));
}
結(jié)合源碼我推測袱耽,顯示軟鍵盤沒有成功送達(dá)到FlutterView。我估計問題出在FlutterView疙挺,也許FlutterView 失焦了扛邑。
那么FlutterView 是什么呢?這邊我就不贅述了铐然,感興趣的可以自己搜索一下蔬崩。
首先得獲取到FlutterView,
進(jìn)入FlutterActivitya源碼
/**
* The ID of the {@code FlutterView} created by this activity.
*
* <p>This ID can be used to lookup {@code FlutterView} in the Android view hierarchy. For more,
* see {@link android.view.View#findViewById}.
*/
public static final int FLUTTER_VIEW_ID = ViewUtils.generateViewId(0xF1F2);
可以通過FLUTTER_VIEW_ID獲取FlutterView
@Override
protected void onResume() {
super.onResume();
FlutterView flutterView = findViewById(FLUTTER_VIEW_ID);
flutterView.requestFocus();
}
于是我就在想通過,主動給FlutterView 設(shè)置焦點搀暑,嘗試之后沥阳,軟鍵盤正常了。