Repository navigation
Description
Steps to reproduce
Tested with Flutter 3.47.8, webview_flutter 4.13.1 and webview_flutter_android 4.10.13, on MED-LX2 (Huawei P30 Lite in Huaweis Cloud Testing environment) running Android 10 / EMUI 10.1.0.162 and Huawei WebView 10.0.0.308.
- Extract the attached sample project and open its directory.
- Run
flutter pub get. - Run
flutter run --releaseon the affected device. - Tap Show second page. Relaunch and repeat if it renders correctly.
Expected results
The yellow first page is replaced by the green second page.
Actual results
The Flutter button updates and onPageFinished fires, but the WebView keeps showing the yellow first page.
The default Android WebView mode, Texture Layer Hybrid Composition, renders the native WebView into a texture that Flutter displays. Switching to hybrid composition with --dart-define=HYBRID_COMPOSITION=true makes the green page appear.
The failure is triggered by the Huawei fallback in FlutterRenderer.createSurfaceProducer(). Its !hasAndroidHardwareBufferDefect() condition selects SurfaceTextureSurfaceProducer on Huawei API 29. Bypassing that condition to select ImageReaderSurfaceProducer achieves the expected result. Producer selection · Huawei check
Using Hybrid composition for the webview also works as a workaround.
The condition causing the problem came from the video playback fix for #166481.
Code sample
Code sample
import "package:flutter/material.dart";
import "package:webview_flutter/webview_flutter.dart";
import "package:webview_flutter_android/webview_flutter_android.dart";
void main() {
runApp(const MaterialApp(home: WebViewRepro()));
}
class WebViewRepro extends StatefulWidget {
const WebViewRepro({super.key});
@override
State<WebViewRepro> createState() => _WebViewReproState();
}
class _WebViewReproState extends State<WebViewRepro> {
static const hybridComposition = bool.fromEnvironment("HYBRID_COMPOSITION");
late final WebViewController _controller;
bool _showSecondPage = false;
@override
void initState() {
super.initState();
_controller = WebViewController()
..setNavigationDelegate(
NavigationDelegate(
onPageFinished: (_) {
debugPrint("WebView finished loading");
},
),
)
..loadHtmlString(_firstPage);
}
static const _firstPage = """
<!doctype html>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>First page</title>
<body style="background: #ffda80; color: black">
<h1>First WebView page</h1>
</body>
""";
static const _secondPage = """
<!doctype html>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Second page</title>
<body style="background: #98dfaf; color: black">
<h1>Second WebView page</h1>
</body>
""";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("WebView surface repro")),
body: Column(
children: [
ElevatedButton(
onPressed: () {
setState(() {
_showSecondPage = !_showSecondPage;
});
_controller.loadHtmlString(_showSecondPage ? _secondPage : _firstPage);
},
child: Text(_showSecondPage ? "Show first page" : "Show second page"),
),
Expanded(
child: WebViewWidget.fromPlatformCreationParams(
params: AndroidWebViewWidgetCreationParams(
controller: _controller.platform,
displayWithHybridComposition: hybridComposition,
),
),
),
],
),
);
}
}Screenshots or Video
Logs
Logs
11-05 12:38:27.295 I/i_webview_repr(21901): Reinit property: dalvik.vm.checkjni= false
11-05 12:38:27.295 I/i_webview_repr(21901): ReInitProperties: persist.vm.debug.dumpapi= false
11-05 12:38:27.297 E/i_webview_repr(21901): Not starting debugger since process cannot load the jdwp agent.
11-05 12:38:27.337 I/HwFrameworkSecurityPartsFactory(21901): add HwFrameworkSecurityPartsFactory to memory.
11-05 12:38:27.338 E/BehaviorCollectManager(21901): Fail to acquire dataAnalyzerService...
11-05 12:38:27.360 I/i_webview_repr(21901): QarthPatchMonintor::Init
11-05 12:38:27.360 I/i_webview_repr(21901):
11-05 12:38:27.360 I/i_webview_repr(21901): QarthPatchMonintor::StartWatch
11-05 12:38:27.360 I/i_webview_repr(21901):
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::WatchPackage: /data/hotpatch/fwkhotpatch/
11-05 12:38:27.361 I/i_webview_repr(21901):
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::CheckAndWatchPatch: /data/hotpatch/fwkhotpatch/com.example.huawei_webview_repro
11-05 12:38:27.361 I/i_webview_repr(21901):
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::CheckAndWatchPatch: /data/hotpatch/fwkhotpatch/all
11-05 12:38:27.361 I/i_webview_repr(21901):
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::Run
11-05 12:38:27.361 I/i_webview_repr(21901):
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::Reading
11-05 12:38:27.361 I/i_webview_repr(21901):
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::CheckNotifyEvent
11-05 12:38:27.361 I/i_webview_repr(21901):
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::CheckNotifyEvent before read
11-05 12:38:27.362 I/i_webview_repr(21901):
11-05 12:38:27.362 I/HwApiCacheMangerEx(21901): apicache path=/storage/emulated/0 state=mounted key=com.example.huawei_webview_repro#10986#256
11-05 12:38:27.362 I/HwApiCacheMangerEx(21901): need clear apicache,because volumes changed,oldCnt=0 newCnt=1
11-05 12:38:27.365 I/HwApiCacheMangerEx(21901): apicache path=/storage/emulated/0 state=mounted key=com.example.huawei_webview_repro#10986#0
11-05 12:38:27.365 I/HwApiCacheMangerEx(21901): need clear apicache,because volumes changed,oldCnt=1 newCnt=1
11-05 12:38:27.380 I/AwareBitmapCacher(21901): init processName:com.example.huawei_webview_repro pid=21901 uid=10986
11-05 12:38:27.388 E/AwareLog(21901): AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@225bc18
11-05 12:38:27.400 I/iGraphics(21901): [0020080c] pn: com.example.huawei_webview_repro, p: 21901
11-05 12:38:27.401 I/iGraphics(21901): [0030050c] PV 10
11-05 12:38:27.401 I/iGraphics(21901): [0030050c] no element 'igfx'
11-05 12:38:27.402 I/iGraphics(21901): [0030050c] LoadCloudParams lib file success.
11-05 12:38:27.403 E/Parcel (21901): Reading a NULL string not supported here.
11-05 12:38:27.415 E/GED (21901): Failed to get GED Log Buf, err(0)
11-05 12:38:27.464 W/i_webview_repro(21901): type=1400 audit(0.0:265744): avc: denied { read } for pid=21901 name="max_map_count" dev="proc" ino=19128748 scontext=u:r:untrusted_app:s0:c218,c259,c512,c768 tcontext=u:object_r:proc_max_map_count:s0 tclass=file permissive=0
11-05 12:38:27.515 I/flutter (21901): [IMPORTANT:flutter/shell/platform/android/android_context_gl_impeller.cc(104)] Using the Impeller rendering backend (OpenGLES).
11-05 12:38:27.579 I/DecorView[](21901): old windowMode:0 new windoMode:1
11-05 12:38:27.600 I/DecorView[](21901): old windowMode:1 new windoMode:1
11-05 12:38:27.620 W/HiTouch_HiTouchSensor(21901): depended package hiTouch does n't exist!
11-05 12:38:27.620 I/HiTouch_HiTouchSensor(21901): HiTouch restricted: system app HiTouch don't exist.
11-05 12:38:27.676 W/Gralloc3(21901): mapper 3.x is not supported
11-05 12:38:27.679 E/ion (21901): ioctl c0044901 failed with code -1: Invalid argument
11-05 12:38:31.576 I/Choreographer(21901): Skipped 237 frames! The application may be doing too much work on its main thread.
11-05 12:38:31.601 W/InputMethodManager(21901): startInputReason = 1
11-05 12:38:31.617 I/WebViewFactory(21901): Loading com.huawei.webview version 10.0.0.308 (code 356)
11-05 12:38:31.688 I/cr_PathUtils(21901): Get data directory:/data/user/0/com.example.huawei_webview_repro/app_hws_webview
11-05 12:38:31.692 I/cr_LibraryLoader(21901): Time to load native libraries: 4 ms
11-05 12:38:31.707 I/hwschromium-356(21901): [INFO:library_loader_hooks.cc(51)] Chromium logging enabled: level = 0, default verbosity = 0
11-05 12:38:31.708 I/cr_LibraryLoader(21901): Expected native library version number "78.0.3904.108", actual native library version number "78.0.3904.108"
11-05 12:38:31.726 W/cr_ChildProcLH(21901): Create a new ChildConnectionAllocator with package name = com.huawei.webview, sandboxed = true
11-05 12:38:31.731 I/cr_BrowserStartup(21901): Initializing chromium process, singleProcess=false
11-05 12:38:31.741 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/natives_blob.bin
11-05 12:38:31.742 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/snapshot_blob_32.bin
11-05 12:38:31.742 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/snapshot_blob_64.bin
11-05 12:38:31.742 E/hwschromium-356(21901): [ERROR:apk_assets.cc(41)] open apk asset failed : assets/snapshot_blob_64.bin
11-05 12:38:31.743 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/icudtl.dat
11-05 12:38:31.744 I/hwschromium-356(21901): [INFO:content_main_runner_impl.cc(217)] Load v8-snapshot from file v8_snapshot_32_data
11-05 12:38:31.748 E/hwschromium-356(21901): [ERROR:filesystem_posix.cc(89)] stat /data/user/0/com.example.huawei_webview_repro/cache/WebView/Crashpad: No such file or directory (2)
11-05 12:38:31.749 E/hwschromium-356(21901): [ERROR:filesystem_posix.cc(62)] mkdir /data/user/0/com.example.huawei_webview_repro/cache/WebView/Crashpad: No such file or directory (2)
11-05 12:38:31.752 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/chrome_100_percent.pak
11-05 12:38:31.755 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/stored-locales/en-US.pak
11-05 12:38:31.756 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/resources.pak
11-05 12:38:31.777 W/hwschromium-356(21901): [WARNING:dns_config_service_posix.cc(341)] Failed to read DnsConfig.
11-05 12:38:31.803 I/hwschromium-356(21901): [INFO:cookie_manager.cc(354)] Execute Async Setting CookieManager Start
11-05 12:38:31.803 I/hwschromium-356(21901): [INFO:cookie_manager.cc(378)] Execute Async Setting CookieManager End
11-05 12:38:32.060 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/natives_blob.bin
11-05 12:38:32.061 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/snapshot_blob_32.bin
11-05 12:38:32.061 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/snapshot_blob_64.bin
11-05 12:38:32.062 W/hwschromium-356(21901): [WARNING:child_process_launcher_helper_posix.cc(119)] Ignoring invalid file assets/snapshot_blob_64.bin
11-05 12:38:32.066 W/cr_media(21901): Requires BLUETOOTH permission
11-05 12:38:32.077 I/cr_ChildProcLauncher(21901): on connect callback, pid=21977
11-05 12:38:32.090 W/Gralloc3(21901): allocator 3.x is not supported
11-05 12:38:32.093 W/IMGSRV (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma
11-05 12:38:32.128 I/chatty (21901): uid=10986(com.example.huawei_webview_repro) Chrome_InProcGp identical 2 lines
11-05 12:38:32.128 W/IMGSRV (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma
11-05 12:38:32.139 I/DecorView[](21901): old windowMode:1 new windoMode:1
11-05 12:38:32.175 W/VideoCapabilities(21901): Unsupported mime video/divx
11-05 12:38:32.177 W/VideoCapabilities(21901): Unsupported mime video/divx3
11-05 12:38:32.183 W/VideoCapabilities(21901): Unrecognized profile/level 1/32 for video/mp4v-es
11-05 12:38:32.183 W/VideoCapabilities(21901): Unrecognized profile/level 32768/2 for video/mp4v-es
11-05 12:38:32.183 W/VideoCapabilities(21901): Unrecognized profile/level 32768/64 for video/mp4v-es
11-05 12:38:32.185 W/VideoCapabilities(21901): Unsupported mime video/x-ms-wmv
11-05 12:38:32.186 W/VideoCapabilities(21901): Unsupported mime video/xvid
11-05 12:38:32.191 W/VideoCapabilities(21901): Unrecognized profile/level 1/32 for video/mp4v-es
11-05 12:38:32.201 I/VideoCapabilities(21901): Unsupported profile 4 for video/mp4v-es
11-05 12:38:32.239 W/IMGSRV (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma
11-05 12:38:32.295 I/chatty (21901): uid=10986(com.example.huawei_webview_repro) Chrome_InProcGp identical 4 lines
11-05 12:38:32.303 W/IMGSRV (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma
11-05 12:38:32.320 I/HwViewRootImpl(21901): removeInvalidNode jank list is null
11-05 12:38:32.341 W/InputMethodManager(21901): startInputReason = 5
11-05 12:38:32.394 I/flutter (21901): WebView finished loading
11-05 12:38:32.407 W/IMGSRV (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma
11-05 12:38:33.865 W/OpenGLRenderer(21901): dequeueBuffer failed, error = -110; switching to fallback
11-05 12:38:33.867 W/OpenGLRenderer(21901): reserveNext failed, error = -2147483648 (Unknown error -2147483648)
11-05 12:38:38.509 I/Hwaps (21901): APS: EventAnalyzed: initAPS: version is 10.1.0.18
11-05 12:38:38.511 I/hwaps (21901): HwAps: JNI_OnLoad
11-05 12:38:38.671 I/flutter (21901): WebView finished loading
11-05 12:38:44.423 I/flutter (21901): WebView finished loading
11-05 12:38:50.195 I/flutter (21901): WebView finished loading
11-05 12:39:15.795 W/InputMethodManager(21901): startInputReason = 4
11-05 12:39:29.127 I/flutter (21901): WebView finished loading
11-05 12:39:33.835 I/GED (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.864 I/GED (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.892 I/GED (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.894 I/GED (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.894 I/GED (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.895 I/chatty (21901): uid=10986(com.example.huawei_webview_repro) 1.io identical 1 line
11-05 12:39:33.895 I/GED (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:38.911 I/hwschromium-356(21901): [INFO:aw_contents.cc(360)] AwContents 0xbda74780 destroyed
Flutter Doctor output
Doctor output
[✓] Flutter (Channel stable, 3.47.8, on Linux Mint 22.3 6.8.0-147-generic, locale en_US.UTF-8) [40ms]
• Flutter version 3.47.8 on channel stable at <stock-flutter-sdk>
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 737ba8f885 (13 days ago), 2026-10-22 21:37:31 -0700
• Engine revision cf636b1dfb
• Dart version 3.13.7
• DevTools version 2.60.0
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration
[!] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [2.4s]
• Android SDK at /home/<user>/development/Android/Sdk
• Emulator version 35.5.10.0 (build_id 13402964) (CL:N/A)
• Platform android-37.0, build-tools 36.1.0
• Java binary at: /opt/android-studio/jbr/bin/java
This is the JDK bundled with the latest Android Studio installation on this machine.
To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
• Java version OpenJDK Runtime Environment (build 21.0.6+-13368085-b895.109)
! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome) [9ms]
! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[✗] Linux toolchain - develop for Linux desktop [812ms]
✗ clang++ is required for Linux development.
It is likely available from your distribution (e.g.: apt install clang), or can be downloaded from https://releases.llvm.org/
✗ CMake is required for Linux development.
It is likely available from your distribution (e.g.: apt install cmake), or can be downloaded from https://cmake.org/download/
✗ ninja is required for Linux development.
It is likely available from your distribution (e.g.: apt install ninja-build), or can be downloaded from https://github.com/ninja-build/ninja/releases
• pkg-config version 1.8.1
• OpenGL core renderer: NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2 (X11)
• OpenGL core version: 4.6.0 NVIDIA 595.99.02 (X11)
• OpenGL core shading language version: 4.60 NVIDIA (X11)
• OpenGL ES renderer: NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2 (X11)
• OpenGL ES version: OpenGL ES 3.2 NVIDIA 595.99.02 (X11)
• OpenGL ES shading language version: OpenGL ES GLSL ES 3.20 (X11)
• GL_EXT_framebuffer_blit: yes (X11)
• GL_EXT_texture_format_BGRA8888: yes (X11)
[✓] Connected device (2 available) [196ms]
• Pixel 3a (mobile) • <redacted device serial> • android-arm64 • Android 12 (API 32)
• Linux (desktop) • linux • linux-x64 • Linux Mint 22.3 6.8.0-147-generic
[✓] Network resources [445ms]
• All expected network resources are available.
! Doctor found issues in 3 categories.
</details>

Activity
suryaKommana2662 commentedon Nov 6, 2026
@Aulig Thanks for the report. I tested the provided reproduction on a Pixel 10 A, but I couldn't reproduce the issue. The WebView updates as expected on this device. Since the report specifically identifies Huawei devices running Android 10, I couldn't verify the behaviour on the affected hardware. routing to the
team-androidfor further investigation.okorohelijah commentedon Nov 10, 2026
@Aulig does this only reproduce when the system WebView provider is com.huawei.webview, or does it also freeze if switched to standard Android System WebView / Chrome?"
Aulig commentedon Nov 11, 2026
@okorohelijah I can't say 100% for sure since I'm testing via Huawei's cloud testing tool where I can't change it. However, my app's users who initially reported this issue to me say they are using Android System WebView and experience this bug.
Also considering that the code I identified above to be the cause of the issue doesn't discriminate between WebView providers I think it's very likely.