)]}'
{
  "commit": "d2248aaa228bff240d4a8398afc41ee34e36a19a",
  "tree": "32349952afc993e14ebbdebbe0fc211cd83c576b",
  "parents": [
    "1e927971a0f98ae14a9ad38b45c4024ae7f0d25a"
  ],
  "author": {
    "name": "Yusuf İhsan Görgel",
    "email": "developeryusuf@icloud.com",
    "time": "Thu Jul 30 06:00:00 2026 +0300"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jul 30 03:00:00 2026 +0000"
  },
  "message": "Return null from RenderProxyBoxMixin.computeDryBaseline when the child has no baseline (#189723)\n\n`RenderProxyBoxMixin.computeDryBaseline` forwards the child\u0027s dry\nbaseline as `result ?? super.computeDryBaseline(constraints, baseline)`.\nWhen a child is present but has no baseline, the null falls through to\n`RenderBox.computeDryBaseline`, which asserts that the class \"does not\nimplement computeDryBaseline\". Returning null is explicitly allowed by\nthe `computeDryBaseline` contract, so any proxy box above such a child\ncrashes when queried for a dry baseline, for example a baseline-aligned\n`WidgetSpan` wrapping `Semantics`.\n\nThe mixin now returns the child\u0027s answer as-is when a child is present,\nand only falls back to the base implementation when there is no child.\nThis matches what `RenderConstrainedBox` already does in the same file.\n\nAdded a rendering-layer regression test. The widget-level reproduction\nfrom the issue also passes with this change.\n\nFixes https://github.com/flutter/flutter/issues/189711\n\n## Pre-launch Checklist\n\n- [x] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [x] I read the [AI contribution guidelines] and understand my\nresponsibilities, or I am not using AI tools.\n- [x] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [x] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [x] I signed the [CLA].\n- [x] I listed at least one issue that this PR fixes in the description\nabove.\n- [x] I updated/added relevant documentation (doc comments with `///`).\n- [x] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [x] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [x] All existing and new tests are passing.\n\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n\n---------\n\nCo-authored-by: chunhtai \u003c47866232+chunhtai@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a98227645f87a83a9ce0aa7a58b26beae02ca42c",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/proxy_box.dart",
      "new_id": "e47a18c9a668fd384c7d4fbcb4140dc93ce254f6",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/proxy_box.dart"
    },
    {
      "type": "modify",
      "old_id": "75d728f2f8345ac9ba3e85b474ccd38b2b668cf6",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/rendering/proxy_box_test.dart",
      "new_id": "86e7c888082e3731190b5ed81f1db163ddefb708",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/rendering/proxy_box_test.dart"
    }
  ]
}
