Flutter-WebView白屏和模糊问题

130 阅读1分钟

Android 端网页白屏

问题1:在部分鸿蒙系统 HarmonyOS 和 Android 手机系统上,网页会出现渲染模糊现象;

问题2:升级 Android Studio(2024.2.2 Patch 1)后,部分 HarmonyOS 和 Android 手机会出现白屏现象,未升级前无此问题。

Android Studio 详细版本如下:

Android Studio Ladybug Feature Drop | 2024.2.2 Patch 1
Build #AI-242.23726.103.2422.13016713, built on February 6, 2025
Runtime version: 21.0.5+-12932927-b750.29 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Toolkit: sun.lwawt.macosx.LWCToolkit

原因说明

在国内,手机厂商都会在 Android 系统的基础上进行深度定制,与谷歌官方 WebView 版本并不同步,以上问题都是由于此原因。

谷歌官方的 Android 系统,在API < 23时,Hybrid Composition 是默认开启的。在API >= 23时,可以通过AndroidWebViewWidgetCreationParams.displayWithHybridComposition配置。

Hybrid Composition 开启后会牺牲一些性能,但会获得更好的显示效果。开启后可解决网页模糊问题。

webview_flutter_android 文档说明如下:

Hybrid Composition

This is the current default mode for versions <23. It ensures that the WebView will display and work as expected, at the cost of some performance. See:

docs.flutter.dev/platform-in…

This can be configured for versions >=23 with AndroidWebViewWidgetCreationParams.displayWithHybridComposition. See pub.dev/packages/we… for more details on setting platform-specific features in the main plugin.

解决示例

定制的 Android 未自动开启 Hybrid Composition,在 Android 系统上手动设置开启即可。

import 'package:webview_flutter_android/webview_flutter_android.dart';

final _webVC = WebViewController();
final webView = _buildWebViewWidget(_webVC);

// 修复部分 Android 手机渲染空白和模糊问题
// Android 手机设置 displayWithHybridComposition 为 true
Widget _buildWebViewWidget(WebViewController webVC) {
  if (WebViewPlatform.instance is AndroidWebViewPlatform) {
    return WebViewWidget.fromPlatformCreationParams(
      params: AndroidWebViewWidgetCreationParams(controller: webVC.platform, displayWithHybridComposition: true),
    );
  }
  // 其他系统保持默认值即可
  return WebViewWidget(controller: webVC);
}

参考链接

平台差异

Flutter WebView 小记

webview_flutter_android