)]}'
{
  "commit": "8c271e5cb821c800d802990792f038d72dd9b93b",
  "tree": "da66aa1d23734879341b9e7b040a91952c402052",
  "parents": [
    "77cb4e604104d0778b1dad3a9ea8adcf4c89bc4a"
  ],
  "author": {
    "name": "Greg Spencer",
    "email": "gspencergoog@users.noreply.github.com",
    "time": "Wed Sep 28 14:10:18 2022 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Sep 28 14:10:18 2022 -0700"
  },
  "message": "Implement Material MenuBar and MenuAnchor (#112239)\n\nThis implements a MenuBar widget that can render a Material menu bar, and a MenuAnchor widget used to create a cascading menu in a region. The menus are drawn in the overlay, while the menu bar itself is in the regular widget tree. Keyboard traversal works between the two.\r\n\r\nThis implementation of the MenuBar uses MenuAnchor to create a cascading menu that contains widgets representing the menu items. These menu items can be any kind of widget, but are typically SubmenuButtons that host submenus, or MenuItemButtons that have shortcut hints (but don\u0027t actually activate the shortcuts) and don\u0027t host submenus.\r\n\r\nCascading menus can be created outside of a MenuBar by using a MenuAnchor. They can be either given a specific location to appear (a coordinate), or they can be located by the MenuAnchor region that wraps the control that opens them.\r\n\r\nThe developer may also create a MenuController to pass to the various menu primitives (MenuBar or MenuAnchor) to associate menus so that they can be traversed together and closed together. Creating a controller is not required.",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5d0c8decf420e34019a8991d61f0d749c8bd1621",
      "new_mode": 33188,
      "new_path": "dev/manual_tests/lib/menu_anchor.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b613e14b0bf4e2ae384d5e8b64117f7ac4ff1913",
      "new_mode": 33188,
      "new_path": "examples/api/lib/material/menu_anchor/menu_anchor.0.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "da12e0b72a58208f7ed6f1f85569806518a79317",
      "new_mode": 33188,
      "new_path": "examples/api/lib/material/menu_anchor/menu_anchor.1.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eb681211c17d121211abb1dc3339332d49d2efda",
      "new_mode": 33188,
      "new_path": "examples/api/lib/material/menu_anchor/menu_bar.0.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "54016dcf25732214a66d9b2a2bcfc2b6aab43534",
      "new_mode": 33188,
      "new_path": "examples/api/test/material/menu_anchor/menu_anchor.0_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dbe3547098bd2accec275d4b1ad265c99d01c760",
      "new_mode": 33188,
      "new_path": "examples/api/test/material/menu_anchor/menu_anchor.1_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b508ba444497f7a8310b8a9e5a8d068c746dd776",
      "new_mode": 33188,
      "new_path": "examples/api/test/material/menu_anchor/menu_bar.0_test.dart"
    },
    {
      "type": "modify",
      "old_id": "5e84a604a6e24d3d84174b33c1c79691c576f504",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/material.dart",
      "new_id": "33e77f891a43cb9a295f0878461ebe69d8120881",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/material.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "31671179e7038de0a15e81c354c7732392cd3ba6",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/material/menu_anchor.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8a8299f7041e490f3881cb4687c7f5c5001f1a97",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/material/menu_bar_theme.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f4462e162af84d0028f96fa2b573593360ef62ec",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/material/menu_button_theme.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a335eee28e5783345e09ae99c01f44b2a3c8777a",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/material/menu_style.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b1c098bf4cda75d46f3b4c4b9e3847c25f1e44e3",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/material/menu_theme.dart"
    },
    {
      "type": "modify",
      "old_id": "9be4e53806d34b931a6e17d081d66812b0501e60",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/material/text_button.dart",
      "new_id": "b3dc1b536c82bfe185b853b548e45b53d5c552a8",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/material/text_button.dart"
    },
    {
      "type": "modify",
      "old_id": "30cd86748e8ab5312e6446a66ae35b26a01d7e4f",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/material/theme_data.dart",
      "new_id": "3b1e90cc00c328a7cbc37d1b36ac7f8963868fde",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/material/theme_data.dart"
    },
    {
      "type": "modify",
      "old_id": "b1cf4eeef48a096d4a68829028056ca4122a8ab7",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/layer.dart",
      "new_id": "a298d504890839de5a015383f0ee745cd267ae2c",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/layer.dart"
    },
    {
      "type": "modify",
      "old_id": "6465d88c937b5ecab2aef0f2858c9abf7f94f632",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/proxy_box.dart",
      "new_id": "074711c1b635ed5f0e2033c26339577f41538c96",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/proxy_box.dart"
    },
    {
      "type": "modify",
      "old_id": "6fe55c06c2c5c1a74def06f8a5100547f74039d9",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/basic.dart",
      "new_id": "8c86b2785ec4c6da0dc1a65fb44c002420c5b487",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/basic.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c8249b06df783b29c2274d08ae27dd2ab70d9329",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/material/menu_anchor_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b705d10996688c5f0701ae65354264aaaac0ed80",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/material/menu_bar_theme_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "66412d0c8278cee9319bd0b860a2bd520c1a355a",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/material/menu_style_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d0459bcf8d445da9fb37c4ee18275af33334462c",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/material/menu_theme_test.dart"
    },
    {
      "type": "modify",
      "old_id": "5e2e0fba31e034cedccec7c4ff5aaf5c7b9e4e89",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/material/theme_data_test.dart",
      "new_id": "e0e4a71d5a4047bdd8980c88f9943d0b5a49a92c",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/material/theme_data_test.dart"
    }
  ]
}
