오늘은 안드로이드 플랫폼에서 빈번하게 발생하는 웹뷰 하이브리드 관련 이슈에 대해 다뤄보려고 한다.
안드로이드 기기에서 휴대폰에 따라 웹뷰 내의 TextField를 터치해도 키보드가 올라오지 않는 이슈가 발생했다.
어떤 조건이 있는 것도 아니고, 같은 기종에, 같은 API 레벨인데도 어떤 기기는 뜨고 어떤 기기는 안 뜨는 혼란스러운 이슈에 애를 많이 먹었는데 결론적으로 해결책은 아주 간단하다.
해당 WebView가 있는 클래스의 initState()에서 다음의 코드로 초기화 시켜준다.
if(Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
InAppWebView 위젯의 initialOptions 속성에 다음과 같은 값을 적용시킨다.
initialOptions: InAppWebViewGroupOptions(
android: AndroidInAppWebViewOptions(
useHybridComposition: true
)
),
혹시 위의 코드로도 해결이 되지 않는다면, initState에서 아래의 코드를 실행시켜보기 ..
if (Platform.isAndroid) {
await AndroidInAppWebViewController.setWebContentsDebuggingEnabled(true);
var swAvailable = await AndroidWebViewFeature.isFeatureSupported(
AndroidWebViewFeature.SERVICE_WORKER_BASIC_USAGE);
var swInterceptAvailable = await AndroidWebViewFeature.isFeatureSupported(
AndroidWebViewFeature.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST);
if (swAvailable && swInterceptAvailable) {
AndroidServiceWorkerController serviceWorkerController =
AndroidServiceWorkerController.instance();
await serviceWorkerController
.setServiceWorkerClient(AndroidServiceWorkerClient(
shouldInterceptRequest: (request) async {
return null;
},
));
}
}
오늘도 삽질중 ...