toMessages method
Expands this action into one or more low-level replay messages.
Implementation
List<Msg> toMessages() {
final times = math.max(1, repeat);
final output = <Msg>[];
switch (type) {
case 'text':
for (var r = 0; r < times; r++) {
for (final rune in value.runes) {
output.add(KeyMsg(Key(KeyType.runes, runes: [rune])));
}
}
return output;
case 'special':
final parsed = _parseKeyType(key);
for (var i = 0; i < times; i++) {
output.add(KeyMsg(Key(parsed)));
}
return output;
case 'wheel':
final button = _parseWheelButton(direction);
for (var i = 0; i < times; i++) {
output.add(
ReplayMouseMsg(
action: MouseAction.wheel,
button: button,
x: x,
y: y,
),
);
}
return output;
case 'tap':
for (var i = 0; i < times; i++) {
output.add(
ReplayMouseMsg(
action: MouseAction.press,
button: MouseButton.left,
x: x,
y: y,
),
);
output.add(
ReplayMouseMsg(
action: MouseAction.release,
button: MouseButton.left,
x: x,
y: y,
),
);
}
return output;
case 'move':
for (var i = 0; i < times; i++) {
output.add(
ReplayMouseMsg(
action: MouseAction.motion,
button: MouseButton.none,
x: x,
y: y,
),
);
}
return output;
case 'drag':
final dragSteps = math.max(1, steps);
for (var r = 0; r < times; r++) {
output.add(
ReplayMouseMsg(
action: MouseAction.press,
button: MouseButton.left,
x: x,
y: y,
),
);
for (var i = 1; i <= dragSteps; i++) {
final t = i / dragSteps;
output.add(
ReplayMouseMsg(
action: MouseAction.motion,
button: MouseButton.left,
x: x + ((x2 - x) * t).round(),
y: y + ((y2 - y) * t).round(),
),
);
}
output.add(
ReplayMouseMsg(
action: MouseAction.release,
button: MouseButton.left,
x: x2,
y: y2,
),
);
}
return output;
case 'event':
final event = customEvent;
if (event == null) return const <Msg>[];
for (var i = 0; i < times; i++) {
output.add(ReplayEventMsg(event));
}
return output;
default:
return const <Msg>[];
}
}