Flutter WebView 버전 이슈 대응
Unhandled Exception: PlatformException(error, Unknown feature SUPPRESS_ERROR_PAGE, null, java.lang.RuntimeException: Unknown feature SUPPRESS_ERROR_PAGE
원인 : 안드로이드 내장 시스템 WebView 구현 버전이 낮아 발생하는 오류
[ 개발자 옵션 → WebView 구현 ] 에서 버전 확인가능
현재 80대 버전에서 오류 발생
조치 방법
Flutter MethodChannel 을 이용해서 Kotlin 을 코드로 다비이스 WebView 버전을 가져 옵니다.
참고. 아래는 저희가 처리하는 예시 입니다.
import android.webkit.WebView
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
class MainActivity : FlutterActivity() {
private val CHANNEL = "webview_version"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "getWebViewVersion") {
val webViewVersion = WebView(this).settings.userAgentString
result.success(webViewVersion)
} else {
result.notImplemented()
}
}
}
}
Flutter 에서 MethodChannel을 호출 합니다.
ExerciseList.dart
if (Platform.isAndroid) {
const platform = MethodChannel("webview_version");
try {
final String version = await platform.invokeMethod("getWebViewVersion");
// 정규식을 사용하여 WebView 버전만 추출
RegExp regExp = RegExp(r'Chrome/(\d+)\.');
Match? match = regExp.firstMatch(version);
if (match != null) {
String majorVersion = match?.group(1) ?? "Unknown";
if (int.parse(majorVersion) < 100) { // 100 이상으로 올려도 괜찮습니다.
updateWebView()
return;
}
} else {
print("WebView 버전을 찾을 수 없습니다.");
}
} on PlatformException catch (e) {
print("WebView 버전 가져오기 오류: '${e.message}'.");
}
void updateWebView() async {
final url = "https://play.google.com/store/apps/details?id=com.google.android.webview";
if (await canLaunch(url)) {
await launch(url);
}
}
}
위 내용은 웹뷰(운동) 호출 전 페이지에서 버전을 체크 후 플레이 스토어로 이동하는 로직입니다.
스토어에 들어가서 받아야할 앱 이미지
추가 오류 대응 법
그래도 아래의 오류가 난다면?
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(error, Unknown feature SUPPRESS_ERROR_PAGE, null, java.lang.RuntimeException: Unknown feature SUPPRESS_ERROR_PAGE
pubspec.yaml 에서 [webview_flutter] 해당 패키지를 제거를 해야합니다.
flutter_inappwebview 와 webview_flutter 충돌로 인한 오류가 발생합니다.