)]}'
{
  "commit": "1aa892c09c8bd0c06a2bc5bfcccbdbb2cebb80f0",
  "tree": "8c743fcb68c2ff578223ad2e964010ce0a6ca2ca",
  "parents": [
    "03b36d6289ec5cc0aa9b5fb9b66bc67a2851df35"
  ],
  "author": {
    "name": "Maurice Parrish",
    "email": "10687576+bparrishMines@users.noreply.github.com",
    "time": "Thu Apr 09 12:03:15 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Apr 09 16:03:15 2026 +0000"
  },
  "message": "[webview_flutter_android] Adds support to opt out of Android inset changes (#11192)\n\nFor WebView versions \u003e\u003d144, support has been added for [displayCutout()](https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat.Type#displayCutout%28%29) insets and [systemBars()](https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat.Type#systemBars%28%29) insets. This is causing WebViews to incorrectly report that it is obscured by a system bar or display cutout as demonstrated in this [issue](https://github.com/flutter/flutter/issues/182208). \r\n\r\nThis adds the opt out for inset changes as explained [in this chromium doc](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/insets.md#opt_out). It seems Flutter handles safe areas for platform views, so the `AndroidWebViewController` can zero out inset changes to the WebContent.\r\n\r\niOS does [something similar](https://github.com/flutter/packages/blob/main/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift#L50). And it also sets [UIScrollView.contentInsetAdjustmentBehavior](https://developer.apple.com/documentation/uikit/uiscrollview/contentinsetadjustmentbehavior-swift.property) to `Never`. My assumption was that this was never done for Android, because `WebView`s didn\u0027t receive these inset changes until this version.\r\n\r\n\u003cdetails open\u003e\u003csummary\u003eCode sample\u003c/summary\u003e\r\n\r\nmain.dart in `webview_flutter_android`:\r\n\r\n```dart\r\nimport \u0027package:flutter/material.dart\u0027;\r\nimport \u0027package:webview_flutter_android/webview_flutter_android.dart\u0027;\r\nimport \u0027package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart\u0027;\r\n\r\nconst String htmlPage \u003d \u0027\u0027\u0027\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang\u003d\"de\"\u003e\r\n\u003chead\u003e\r\n    \u003cmeta charset\u003d\"UTF-8\"\u003e\r\n    \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width, initial-scale\u003d1.0\"\u003e\r\n    \u003ctitle\u003eWebView Test\u003c/title\u003e\r\n    \u003cstyle\u003e\r\n        header {\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            right: 0;\r\n            padding-top: env(safe-area-inset-top);\r\n            background-color: blue;\r\n            color: #ffffff;\r\n        }\r\n        .content {\r\n            padding-top: 72px;\r\n        }\r\n    \u003c/style\u003e\r\n\u003c/head\u003e\r\n\u003cbody\u003e\r\n\u003cdiv class\u003d\"container\"\u003e\r\n    \u003cheader\u003e\u003ch1\u003eWebview AppBar\u003c/h1\u003e\u003c/header\u003e\r\n    \u003cdiv class\u003d\"content\"\u003e\r\n        \u003cp\u003eThis is some webview content\u003c/p\u003e\r\n    \u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/body\u003e\r\n\u003c/html\u003e\r\n\u0027\u0027\u0027;\r\n\r\nvoid main() {\r\n  runApp(const MyApp());\r\n}\r\n\r\nclass MyApp extends StatelessWidget {\r\n  const MyApp({super.key});\r\n\r\n  @override\r\n  Widget build(BuildContext context) {\r\n    return MaterialApp(\r\n      title: \u0027Flutter Demo\u0027,\r\n      theme: ThemeData(\r\n        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),\r\n      ),\r\n      home: const MyHomePage(title: \u0027Flutter Demo Home Page\u0027),\r\n    );\r\n  }\r\n}\r\n\r\nclass MyHomePage extends StatefulWidget {\r\n  const MyHomePage({super.key, required this.title});\r\n\r\n  final String title;\r\n\r\n  @override\r\n  State\u003cMyHomePage\u003e createState() \u003d\u003e _MyHomePageState();\r\n}\r\n\r\nclass _MyHomePageState extends State\u003cMyHomePage\u003e {\r\n  late final PlatformWebViewController _controller;\r\n\r\n  @override\r\n  void initState() {\r\n    super.initState();\r\n\r\n    _controller \u003d\r\n        PlatformWebViewController(\r\n            const PlatformWebViewControllerCreationParams(),\r\n          )\r\n          ..setJavaScriptMode(JavaScriptMode.unrestricted)\r\n          ..loadHtmlString(htmlPage);\r\n    // Uncomment to fix.\r\n    /*\r\n   (_controller as AndroidWebViewController).setInsetsForWebContentToIgnore(\r\n      \u003cAndroidWebViewInsets\u003e[\r\n        AndroidWebViewInsets.displayCutout,\r\n        AndroidWebViewInsets.systemBars,\r\n      ],\r\n    );\r\n    */\r\n  }\r\n\r\n  @override\r\n  Widget build(BuildContext context) {\r\n    return Scaffold(\r\n      appBar: AppBar(\r\n        backgroundColor: Theme.of(context).colorScheme.primary,\r\n        toolbarHeight: 0,\r\n      ),\r\n      body: PlatformWebViewWidget(\r\n        PlatformWebViewWidgetCreationParams(controller: _controller),\r\n      ).build(context),\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails open\u003e\u003csummary\u003eScreenshots\u003c/summary\u003e\r\n\r\n| Before      | After |\r\n| ----------- | ----------- |\r\n| \u003cimg width\u003d\"1080\" height\u003d\"2424\" alt\u003d\"Screenshot_20260313_151847\" src\u003d\"https://github.com/user-attachments/assets/202da750-dc9e-4bfd-8a84-72462e405781\" /\u003e | \u003cimg width\u003d\"1080\" height\u003d\"2424\" alt\u003d\"Screenshot_20260313_151957\" src\u003d\"https://github.com/user-attachments/assets/900554b9-2e85-4e28-83e9-71f795974191\" /\u003e       |\r\n\r\n\u003c/details\u003e\r\n\r\nFixes https://github.com/flutter/flutter/issues/182208\r\n\r\n## Pre-Review Checklist\r\n\r\n**Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member\u0027s review for guidance on which automated comments should be addressed.\r\n\r\n[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "92357d7a3e36934f7a20312d80fa537f58fa244f",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/CHANGELOG.md",
      "new_id": "f96b5c98e499961fb703f166b99d1c7fc63fabb1",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "71d26653c2e644e9da917563cd2f640363934aa2",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/AndroidWebkitLibrary.g.kt",
      "new_id": "4f7c259433ac3791f1373377aa5025ccb5e7f68a",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/AndroidWebkitLibrary.g.kt"
    },
    {
      "type": "modify",
      "old_id": "291767e4bb5deedd2273ee32331b237e3ce4dda5",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/ViewProxyApi.java",
      "new_id": "f5566c533e18ac3df8f508d57f52a9e8f8ca625f",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/ViewProxyApi.java"
    },
    {
      "type": "modify",
      "old_id": "aef6c6f0a7a69125dd166f039b8b71cf1b72f2e0",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/ViewTest.java",
      "new_id": "04e27bf258f3f61d739f28b3b726d5b42cffc216",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/ViewTest.java"
    },
    {
      "type": "modify",
      "old_id": "90f5fffb971c11b3e9d99b0642a08fa37b888827",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/lib/src/android_webkit.g.dart",
      "new_id": "5942f8df08ad8faeefdf00cce240d3953b30f7e6",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/lib/src/android_webkit.g.dart"
    },
    {
      "type": "modify",
      "old_id": "00563080c4eca56e9f6499c87090ebac6b1f62f7",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart",
      "new_id": "f33fba2dc0fa78d487bf11641b50de5216318717",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart"
    },
    {
      "type": "modify",
      "old_id": "a6c73ab3e030776a65787f113093323897be7f35",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/pigeons/android_webkit.dart",
      "new_id": "4c9aa4cb9d2f152c89da9aaddeb760c54850d28e",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/pigeons/android_webkit.dart"
    },
    {
      "type": "modify",
      "old_id": "30ff682994acc079b25ffd7a61a13a00eb3e298a",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/pubspec.yaml",
      "new_id": "da5165f073307a11e0805d780cf5cfbe4d512d55",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/pubspec.yaml"
    },
    {
      "type": "modify",
      "old_id": "fa878c5d0da57cc001b05c01a4cc1dd75b525751",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart",
      "new_id": "e2af88dcacbb34a7f0784f4429783d8c493a586c",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart"
    },
    {
      "type": "modify",
      "old_id": "e5776a14a1a0b904be26900be2b62eeac1afec86",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart",
      "new_id": "afadfb66fa5491f9d91a6d692c92e374f53d5ed7",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart"
    },
    {
      "type": "modify",
      "old_id": "eb020a5d61bd97cd5da69a648cd1f0b33ff37a05",
      "old_mode": 33188,
      "old_path": "packages/webview_flutter/webview_flutter_android/test/legacy/webview_android_widget_test.mocks.dart",
      "new_id": "09de377e16ecc5703025b18fe09487a9ab977277",
      "new_mode": 33188,
      "new_path": "packages/webview_flutter/webview_flutter_android/test/legacy/webview_android_widget_test.mocks.dart"
    }
  ]
}
