registerControlCallback method
override
Register a callback function to be called when control events occur.
control is the name of the control (e.g., "ButtonSouth", "AbsoluteX").
triggers is a list of event types to listen for (e.g., "ButtonPress", "ButtonRelease").
If "ButtonChange" is included, it will register callbacks for both "ButtonPress" and "ButtonRelease".
callback is the function to call when matching events occur. If null, the callbacks for those triggers will be unregistered.
await myInputController.registerControlCallback(
"ButtonSouth",
["ButtonPress", "ButtonRelease"],
(Event event) {
print('Control event: ${event.control}, value: ${event.value}');
},
);
For more information, see InputController component.
Implementation
@override
Future<void> registerControlCallback(String control, List<String> triggers, void Function(Event)? callback,
{Map<String, dynamic>? extra}) async {
if (extra != null) {
_extra = extra.toStruct();
}
if (!_callbacks.containsKey(control)) {
_callbacks[control] = {};
}
for (final trigger in triggers) {
if (trigger == 'ButtonChange') {
_callbacks[control]!['ButtonPress'] = callback;
_callbacks[control]!['ButtonRelease'] = callback;
} else {
_callbacks[control]![trigger] = callback;
}
}
if (_streamRunning) {
_streamNeedsReconnect = true;
await _streamSubscription?.cancel();
_streamSubscription = null;
} else {
_streamRunning = true;
_connectStream();
}
}