keyboard_invoker 2.0.0 copy "keyboard_invoker: ^2.0.0" to clipboard
keyboard_invoker: ^2.0.0 copied to clipboard

This plugin allows you to invoke keystrokes on the host machine from a Flutter application. It also has a built-in Recorder that allows you to record and replay keystrokes.

keyboard_invoker #

keyboard_invoker is a Flutter lib that allows you to invoke and record keys on the host os.

Features #

  • Record Keys: Capture a sequence of key presses to create custom macros.
  • Invoke Keys: Invoke recorded or predefined key sequences on your host OS.
  • Install XdoTool (Linux only): Easily set up the required tool for Linux support with a single command.

Platform Support #

Windows Linux MacOS
✔️ ✔️ ✔️

Getting Started #

To use the keyboard_invoker lib inside your Flutter project you can follow those simple steps:

Installing #

To add keyboard_invoker to your Flutter project, open your project folder in the command prompt and run the following command:

flutter pub add keyboard_invoker

Now you should be able to use the keyboard_invoker lib inside your project.

Installing (latest github commit) #

If you would like to use the latest version, committed to the main branch, you can edit your pubspec.yaml file and change the keyboard_invoker dependency from this:

...
dependencies:
  keyboard_invoker: <installed version>
...

to something like this:

...
dependencies:
  keyboard_invoker:
    git:
      url: https://github.com/KitsuneYokai/keyboard_invoker.git
      ref: main
...

and now you should be able to use the latest version of keyboard_invoker, committed to the main branch.

!!! It's not advised to use the main branch in production, as it may contain breaking changes or bugs !!!

Usage/Examples #

In this example we gonna use the Provider package to keep track of the KeyboardInvoker states.

Here is an short example:

Implementing the KeyboardInvoker #

void main() {
  final _keyboardInvoker = KeyboardInvoker();

  runApp(
    ChangeNotifierProvider(
      create: (_) => _keyboardInvoker,
      child: const MyApp(),
    ),
  );
}

Then, you can access it inside your widgets build method like this:

@override
Widget build(BuildContext context) {
  final keyboardInvokerPlugin = Provider.of<KeyboardInvoker>(context);
  ...
}

Record Keys #

ElevatedButton(
  onPressed: () {
    // Start or stop the recording depending on the current state of the recorder
    if (keyboardInvoker.recorder.isRecording) {
      keyboardInvoker.recorder.stopRecording();
    } else {
      keyboardInvoker.recorder.startRecording();
    }
  },
  child: Icon(
    keyboardInvoker.recorder.isRecording
        ? Icons.stop_circle
        : Icons.fiber_manual_record,
    color: keyboardInvoker.recorder.isRecording
        ? Colors.red
        : Colors.white,
  ),
)

Invoke a Macro using the KeyRecordingsMap #

...

final List<KeyRecording> _demoSequence = [
  KeyMap.shiftLeft.keyRecording(keyEventType: KeyEventType.keyDown),
  KeyMap.keyH.keyRecording(), // defaults to keyInvoke = down + up in an instant
  KeyMap.shiftLeft.keyRecording(keyEventType: KeyEventType.keyUp),
  KeyMap.keyE.keyRecording(),
  KeyMap.keyL.keyRecording(),
  KeyMap.keyL.keyRecording(),
  KeyMap.keyO.keyRecording(),
  KeyMap.space.keyRecording(delay: 500), // Adding a delay
  KeyMap.keyW.keyRecording(),
  KeyMap.keyO.keyRecording(),
  KeyMap.keyR.keyRecording(),
  KeyMap.keyL.keyRecording(),
  KeyMap.keyD.keyRecording(),
];

...

ElevatedButton(
  onPressed: () async {
    await keyboardInvoker.invokeKeys(_demoSequence);
  },
  child: const Text("Invoke Demo Sequence"),
)

Convert a list of LogicalKeyboardKeys to a Macro List and invoke it #

// A List of LogicalKeyboardKey´s to invoke on the host os
final List<LogicalKeyboardKey> keyboardKeyList = [
    LogicalKeyboardKey.keyH,
    LogicalKeyboardKey.keyI,
]

...

ElevatedButton(
  onPressed: () async {
    try {
      // convert our logical keys to KeyRecording objects
      final keyRecordings =
          KeyRecordingsMap.fromLogicalKeyList(
        _logicalKeyboardKeys,
      );

      // invoke the keys
      await keyboardInvoker.invokeKeys(keyRecordings,
          forceNumState: _forceNumState);
    } catch (e) {
      showError(context, e);
    }
  },
  child: const Icon(Icons.keyboard_command_key),
),

For more examples, check out the example app.

Contributing #

Contributions to keyboard_invoker are very welcome, whether it's fixing bugs, improving documentation, or adding new features. If you encounter a bug or have a feature request, please open an issue on GitHub.

License #

This plugin is released under the MIT License.

3
likes
150
points
29
downloads

Publisher

unverified uploader

Weekly Downloads

This plugin allows you to invoke keystrokes on the host machine from a Flutter application. It also has a built-in Recorder that allows you to record and replay keystrokes.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on keyboard_invoker

Packages that implement keyboard_invoker