2026-07-01 18:25:58 +08:00

2.9 KiB

Contributing to webview_flutter_android

Please start by taking a look at the general guide to contributing to the flutter/packages repo: https://github.com/flutter/packages/blob/main/CONTRIBUTING.md

Package Structure

This plugin serves as a platform implementation plugin as outlined in federated plugins. The sections below will provide an overview of how this plugin implements this portion with Android.

For making changes to this package, please take a look at changing federated plugins.

Quick Overview

This plugin implements the platform interface provided by webview_flutter_platform_interface using the native WebKit APIs for Android.

SDK Wrappers

To access native APIS, this plugins uses Dart wrappers of the native library. The native library is wrapped using using the ProxyApi feature from the pigeon package.

The wrappers for the native library can be updated and modified by changing pigeons/android_webkit.dart.

The generated files are located:

  • lib/src/android_webkit.g.dart
  • android/src/main/java/io/flutter/plugins/webviewflutter/AndroidWebkitLibrary.g.kt

To update the wrapper, follow the steps below:

1. Ensure the project has been built at least once

Run flutter build apk --debug in example/.

2. Make changes to the respective pigeon file that matches the native SDK
3. Run the code generator from the terminal

Run: dart run pigeon --input pigeons/android_webkit.dart

4. Update the generated APIs in native code

Running the flutter build command from step 1 again should provide build errors and indicate what needs to be done. Alternatively, it can be easier to update native code with the platform's specific IDE:

Open example/android/ in a separate Android Studio project.

5. Write API tests

Assuming a non-static method or constructor was added to the native wrapper, a native test will need to be added.

Tests location: android/src/test/java/io/flutter/plugins/webviewflutter/

Important Notes

Calling WebView.destroy() after Dart Instance is Garbage Collected

To avoid a potentially breaking change, the code in android/src/main/java/io/flutter/plugins/webviewflutter/AndroidWebkitLibrary.g.kt needs to be updated after the pigeon generator is run. Please add

val instance: Any? = getInstance(identifier)
if (instance is WebViewProxyApi.WebViewPlatformView) {
  instance.destroy()
}

to AndroidWebkitLibraryPigeonInstanceManager.remove. The current implementation of the native code doesn't currently support handling when the Dart instance is garbage collected.