)]}'
{
  "commit": "c5dd3ec47a51825ffb270c04ae17d95bb98d7429",
  "tree": "cb6f4c41e2d89616d99011d50dedb6ceb94f1f79",
  "parents": [
    "479e27c9f196d6eef839623d9af0f9c7dcdd2dbc"
  ],
  "author": {
    "name": "Greg Spencer",
    "email": "gspencergoog@users.noreply.github.com",
    "time": "Fri Feb 21 14:13:38 2020 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Feb 21 14:13:38 2020 -0800"
  },
  "message": "Fix stuck keys when shift is released before the letter. (#51095)\n\nThis fixes a problem where if you press \"Shift\" and then \"A\", then release \"Shift\" and then \"a\", then the \"A\" key will be \"stuck\" on because the logical key for the key down message is different (capital \"A\") from the logical key for the key up message (lowercase \"a\").\r\n\r\nThis PR changes the pressed keys logic so that it uses the physical key to add/remove keys from the list of pressed keys, but keeps the associated logical key.\r\n\r\nThis does mean that after the \"Shift\" key goes up, the pressed keys contains a capital \"A\" and it doesn\u0027t switch to be a lowercase \"a\", but there isn\u0027t currently any mechanism we can use to do that remapping. This is far less surprising than the current behavior, but is still not quite correct.\r\n\r\nI fixed the event simulation code to take a physicalKey so that it could be matched with the logical key, but the event simulation code isn\u0027t up to the task, since it can only simulate keys that appear in the key maps. The new platform key event design should fix that (added TODOs).",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "da44df0752701ab71b460cc7aec77420ea311e4c",
      "old_mode": 33188,
      "old_path": "dev/manual_tests/lib/raw_keyboard.dart",
      "new_id": "d79445109981c45a6d608ceb899fd4d08f81c24b",
      "new_mode": 33188,
      "new_path": "dev/manual_tests/lib/raw_keyboard.dart"
    },
    {
      "type": "modify",
      "old_id": "60bceaca8d0404245b0c757b1beb6e0b6b89ebb7",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/services/raw_keyboard.dart",
      "new_id": "eb05faf76abdb7ef7dc5d563e61444b56ed7ed76",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/services/raw_keyboard.dart"
    },
    {
      "type": "modify",
      "old_id": "066ace868695c3fe876674ac9e7da57983418997",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/services/raw_keyboard_test.dart",
      "new_id": "caa2781fee43b529851f68d860d9f22b2a7b4411",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/services/raw_keyboard_test.dart"
    },
    {
      "type": "modify",
      "old_id": "11cdaea68ecec88489b6b7c8e48dd11cb6838bd5",
      "old_mode": 33188,
      "old_path": "packages/flutter_test/lib/src/event_simulation.dart",
      "new_id": "388d722e771e39f0f9c6602fec5b46fe6951e869",
      "new_mode": 33188,
      "new_path": "packages/flutter_test/lib/src/event_simulation.dart"
    }
  ]
}
