flutter_onscreen_keyboard 0.1.0 copy "flutter_onscreen_keyboard: ^0.1.0" to clipboard
flutter_onscreen_keyboard: ^0.1.0 copied to clipboard

A customizable and extensible virtual keyboard widget for Flutter desktop and touchscreen apps.

flutter_onscreen_keyboard #

A customizable and extensible on-screen virtual keyboard for Flutter applications. Ideal for desktop and touchscreen environments where physical keyboards are unavailable or limited.

deploy Pub Version Pub Points GitHub License GitHub Repo melos


Demo - flutter_onscreen_keyboard

โœจ Features #

  • ๐Ÿงฉ Customizable Layouts โ€“ Tailor the keyboard layout and style to suit your UI.
  • ๐ŸŽ›๏ธ Keyboard Modes โ€“ Support for multiple keyboard modes like alphanumeric, symbols, etc., with dynamic switching.
  • ๐Ÿ“ฑ Mobile & Desktop Layouts โ€“ Comes with built-in layouts for both mobile and desktop platforms.
  • ๐ŸŽจ Theming Support โ€“ Easily style the keyboard using OnscreenKeyboardThemeData.
  • ๐Ÿ› ๏ธ Extensible Architecture โ€“ Add custom keys or override behavior easily.
  • ๐Ÿ’ป Full Desktop Keyboard โ€“ Complete support for alphabetic, numeric, symbol, and function keys.
  • ๐Ÿ”ค Integrated Text Field โ€“ Comes with a dedicated OnscreenKeyboardTextField widget to easily handle user input.
  • ๐Ÿ–ฑ๏ธ Drag & Align โ€“ Move and align the keyboard anywhere on screen, including top or bottom alignment.
  • ๐Ÿ”Œ Controller API โ€“ Programmatically control keyboard visibility and alignment.
  • ๐Ÿ–ฅ๏ธ Designed for Desktop and Touch Devices โ€“ Ideal for touchscreen setups like POS systems.

๐Ÿš€ Getting Started #

๐Ÿ“ฆ Installation #

Add the package to your pubspec.yaml:

dependencies:
  flutter_onscreen_keyboard: ^0.1.0

๐Ÿงช Usage #

โž• Add OnscreenKeyboard to Your Root Widget #

There are two ways to integrate the keyboard into your root widget:

  • Using OnscreenKeyboard.builder.
return MaterialApp(
  builder: OnscreenKeyboard.builder(), // add this line
  home: const HomeScreen(),
);
  • Or using OnscreenKeyboard.
return MaterialApp(
  builder: (context, child) {
    // your other codes
    // child = ...

    // wrap with OnscreenKeyboard
    return OnscreenKeyboard(child: child);
  },
  home: const HomeScreen(),
);

๐Ÿงพ Use OnscreenKeyboardTextField Anywhere #

You can place the OnscreenKeyboardTextField widget anywhere in your app. It will automatically connect with the keyboard and handle input seamlessly.

@override
Widget build(BuildContext context) {
  return const OnscreenKeyboardTextField(
    // enableOnscreenKeyboard: false, // default to true
  ),
}

๐ŸŽ›๏ธ Access the Keyboard Controller #

Use OnscreenKeyboard.of(context) to get the keyboard controller instance.

final keyboardController = OnscreenKeyboard.of(context);

๐Ÿ“‚ Open and Close the Keyboard Programmatically #

With the controller, you can open or close the keyboard as needed in your application flow.

keyboardController.open(); // open the keyboard

keyboardController.close(); // close the keyboard

๐Ÿ”„ Switch Keyboard Modes #

You can define multiple modes in your KeyboardLayout (e.g., "alphanumeric", "symbols") and switch between them using the controller:

keyboardController.switchMode();

The keyboard will cycle through modes in the order they are defined in your layout.


๐ŸŽ› Built-in Mobile and Desktop Layouts #

By default, the keyboard selects the appropriate layout based on platform:

  • MobileKeyboardLayout for Android/iOS/Fuchsia
  • DesktopKeyboardLayout for macOS/Windows/Linux

You can also explicitly set a custom layout:

OnscreenKeyboard.builder(
  layout: const MobileKeyboardLayout(), // or your custom layout
  // ...more options
),

๐ŸŽน Listen to Key Events #

To respond to key presses globally, use the addRawKeyDownListener method.

class _AppState extends State<App> {
  late final keyboard = OnscreenKeyboard.of(context);

  @override
  void initState() {
    super.initState();
    // listener for raw keyboard events
    keyboard.addRawKeyDownListener(_listener);
  }

  @override
  void dispose() {
    keyboard.removeRawKeyDownListener(_listener);
    super.dispose();
  }

  void _listener(OnscreenKeyboardKey key) {
    switch (key) {
      case TextKey(:final primary): // a text key: "a", "b", "4", etc.
        log('key: "$primary"');
      case ActionKey(:final name): // an action key: "shift", "backspace", etc.
        log('action: $name');
    }
  }

  @override
  Widget build(BuildContext context) {
    // ...
  }
}

๐ŸŽจ Customization #

  • Styles: Customize key colors, shapes, and padding.
  • Layouts: Use built-in or define your own layouts with multiple modes.
  • Behaviors: Override key presses and implement custom actions.

An example of theme customization:

final theme = OnscreenKeyboardThemeData(
  border: Border.all(color: Colors.white),
  margin: const EdgeInsets.all(40),
  padding: const EdgeInsets.all(10),
  borderRadius: BorderRadius.circular(20),
  boxShadow: [
    const BoxShadow(
      blurRadius: 5,
      spreadRadius: 5,
      color: Colors.black12,
    ),
  ],
  // color: ..,
  gradient: const LinearGradient(
    colors: [Colors.indigo, Colors.indigoAccent],
  ),
  textKeyThemeData: TextKeyThemeData(
    backgroundColor: Colors.blue,
    foregroundColor: Colors.white,
    borderRadius: BorderRadius.circular(20),
    margin: const EdgeInsets.all(1),
    boxShadow: [
      const BoxShadow(blurRadius: 2, color: Colors.black26),
    ],
    // padding: ..,
    // textStyle: ..,
    // gradient: ...,
    // border: ..,
  ),
  actionKeyThemeData: ActionKeyThemeData(
    backgroundColor: Colors.blue,
    foregroundColor: Colors.white54,
    pressedBackgroundColor: Colors.indigo,
    pressedForegroundColor: Colors.white,
    borderRadius: BorderRadius.circular(20),
    boxShadow: [const BoxShadow()],
    margin: const EdgeInsets.all(1),
    iconSize: 20,
    fitChild: false,
    // border: ..,
    // gradient: ..,
    // padding: ..,
  ),
);

๐Ÿ“‚ Repository #

Browse the source code and contribute here: ๐Ÿ”— https://github.com/albinpk/flutter_onscreen_keyboard


๐Ÿ› ๏ธ Contributing #

Contributions, issues, and feature requests are welcome! See the CONTRIBUTING.md for guidelines.


๐Ÿ“„ License #

This project is licensed under the MIT License.


๐Ÿ™Œ Credits #

Created and maintained by Albin PK. If you find this package useful, consider giving it a โญ on GitHub and a like on pub.dev!

1
likes
160
points
356
downloads

Publisher

verified publisheralbinpk.dev

Weekly Downloads

A customizable and extensible virtual keyboard widget for Flutter desktop and touchscreen apps.

Repository (GitHub)
View/report issues
Contributing

Topics

#keyboard #virtual-keyboard #onscreen-keyboard #flutter-keyboard #flutter-onscreen-keyboard

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on flutter_onscreen_keyboard