Description
On macOS (Darwin 25.x), the PS5 DualSense controller has several mapping issues:
-
Options button (Start) maps to GamepadButton.back instead of GamepadButton.start
The macOS plugin identifies buttons by SF Symbol names, but both the Options and Create buttons report capsule.portrait — which is hardcoded as back. This makes them indistinguishable and both map to the wrong value.
-
Touchpad click is not mapped
Pressing the touchpad surface fires an event with SF Symbol plus.rectangle, but no pattern in MacosMapping matches it, so it's silently dropped.
-
Touchpad finger movement is not mapped
Swiping the touchpad surface fires analog events with SF Symbol hand.draw, which is also unrecognized.
Root Cause
The macOS native plugin (gamepads_darwin) uses GCControllerElement.sfSymbolsName to identify all buttons. SF Symbol names are ambiguous across controller types — for example, capsule.portrait represents the View/Back button on Xbox but the Options/Start button on DualSense.
The iOS plugin avoids this by registering handlers on typed GCExtendedGamepad properties (e.g. gamepad.buttonMenu, gamepad.buttonOptions) and using fixed key names. The macOS plugin should do the same for system buttons.
Raw event log
Options button (expected: start, got: back)
[DualSense] GamepadButton.back = 1.0 (raw: capsule.portrait 1.0)
Touchpad click (unmapped)
[DualSense] [unmapped] button: plus.rectangle = 1.0
Touchpad finger (unmapped)
[DualSense] [unmapped] analog: hand.draw - xAxis = -1.0
[DualSense] [unmapped] analog: hand.draw - yAxis = 1.0
Environment
- macOS 16 (Darwin 25.3.0)
- DualSense Wireless Controller (PS5)
- Flutter stable
Description
On macOS (Darwin 25.x), the PS5 DualSense controller has several mapping issues:
Options button (Start) maps to
GamepadButton.backinstead ofGamepadButton.startThe macOS plugin identifies buttons by SF Symbol names, but both the Options and Create buttons report
capsule.portrait— which is hardcoded asback. This makes them indistinguishable and both map to the wrong value.Touchpad click is not mapped
Pressing the touchpad surface fires an event with SF Symbol
plus.rectangle, but no pattern inMacosMappingmatches it, so it's silently dropped.Touchpad finger movement is not mapped
Swiping the touchpad surface fires analog events with SF Symbol
hand.draw, which is also unrecognized.Root Cause
The macOS native plugin (
gamepads_darwin) usesGCControllerElement.sfSymbolsNameto identify all buttons. SF Symbol names are ambiguous across controller types — for example,capsule.portraitrepresents the View/Back button on Xbox but the Options/Start button on DualSense.The iOS plugin avoids this by registering handlers on typed
GCExtendedGamepadproperties (e.g.gamepad.buttonMenu,gamepad.buttonOptions) and using fixed key names. The macOS plugin should do the same for system buttons.Raw event log
Options button (expected: start, got: back)
[DualSense] GamepadButton.back = 1.0 (raw: capsule.portrait 1.0)
Touchpad click (unmapped)
[DualSense] [unmapped] button: plus.rectangle = 1.0
Touchpad finger (unmapped)
[DualSense] [unmapped] analog: hand.draw - xAxis = -1.0
[DualSense] [unmapped] analog: hand.draw - yAxis = 1.0
Environment