)]}'
{
  "commit": "c0e052941af58233d0b962e26fcfc03c8fb1124f",
  "tree": "967102ab0cd855b3411f05a22a49cc30166299f6",
  "parents": [
    "411566a2e2ba6c828122a720bc5ecedeabcd7dc0"
  ],
  "author": {
    "name": "Kostia Sokolovskyi",
    "email": "sokolovskyi.konstantin@gmail.com",
    "time": "Thu Nov 06 23:53:22 2025 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Nov 06 22:53:22 2025 +0000"
  },
  "message": "Add haptic notifications support. (#177721)\n\nCloses https://github.com/flutter/flutter/issues/150029\n\n### Description\n- Adds `successNotification`, `warningNotification` and\n`errorNotification` haptics to the framework\n- Adds `UINotificationFeedbackTypeSuccess`,\n`UINotificationFeedbackTypeWarning` and\n`UINotificationFeedbackTypeError` haptics support on iOS\n- Adds `HapticFeedbackConstants.CONFIRM` and\n`HapticFeedbackConstants.REJECT` haptics support on Android\n- Adds tests\n\n\n| iOS | Android | Web |\n|:-:|:-:|:-:|\n| UINotificationFeedbackTypeSuccess | HapticFeedbackConstants.CONFIRM |\n20ms vibration |\n| UINotificationFeedbackTypeWarning |\nHapticFeedbackConstants.KEYBOARD_TAP | 20ms vibration |\n| UINotificationFeedbackTypeError | HapticFeedbackConstants.REJECT |\n30ms vibration |\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 [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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\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[flutter/tests]: https://github.com/flutter/tests\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e9f54aaa2cc518c36bf87515d2f3a125698106c2",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart",
      "new_id": "c868219f4316662b820056c0717f41d96f032246",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart"
    },
    {
      "type": "modify",
      "old_id": "1f9c1057b1109204f85382f49cd6277765b30eaf",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java",
      "new_id": "d25068e81899599e94235d2e5120e6ea36652ab0",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java"
    },
    {
      "type": "modify",
      "old_id": "8315fa35f4a452f8d37da53c07354927f93d12ce",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java",
      "new_id": "3c3ceea6f7beb0ea85122e88fa15aa000587e4d1",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java"
    },
    {
      "type": "modify",
      "old_id": "9d2abb0adef7ff25fb99812b0543e6ef123ad42c",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java",
      "new_id": "423176c80e3ab754d8de401970829013f0b72b89",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java"
    },
    {
      "type": "modify",
      "old_id": "1adf1bd2c46d2775a64078d534b5409fd53f8d4a",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.mm",
      "new_id": "808d87a31a3877da342b299e6610c4102e9f7489",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPlugin.mm"
    },
    {
      "type": "modify",
      "old_id": "83f54d7adc70e6c4deb5347a46542ee3acee608e",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPluginTest.mm",
      "new_id": "7fd8d8c9cd3d3dce12e0a52e99bd206da5872494",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformPluginTest.mm"
    },
    {
      "type": "modify",
      "old_id": "7105fb4ef2743176c0972e6f3c06bf81482486d4",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/services/haptic_feedback.dart",
      "new_id": "1ec0434c8947ca8c6a698c54f697a2db4c3c563c",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/services/haptic_feedback.dart"
    },
    {
      "type": "modify",
      "old_id": "baefeaedf09ec57836141504e789fbe007a1c174",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/services/haptic_feedback_test.dart",
      "new_id": "d471d7eeefc83180b9aadd5c5523d784bd66aab3",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/services/haptic_feedback_test.dart"
    }
  ]
}
