Flutter自定义键盘插件custom_keyboard的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter自定义键盘插件custom_keyboard的使用

“Custom Keyboard” 是一个你可以在项目中使用的插件,可以完全控制它。 大家好,我是Aashar Wahla(https://www.aasharwahla.com)。自v0.8版本以来一直从事Flutter开发。 最近我在个人项目中需要制作一个自定义键盘。我找不到任何可用的自定义包,所以决定将我的包公开。

图片

flutter自定义键盘

功能

如图所示,没有任何固定的东西。从键盘的高度、宽度到背景颜色、点击时的颜色,一切都是可定制的。

开始使用

TODO: 列出先决条件并提供或指向有关如何开始使用该包的信息。

使用方法

构造函数看起来像这样:

const CustomKeyboard({
    Key? key,
    required this.backgroundColor,
    required this.bottomPaddingColor,
    required this.bottomPaddingHeight,
    required this.keyboardHeight,
    required this.keyboardWidth,
    required this.onChange,
    required this.onTapColor,
    required this.textColor,
    required this.keybordButtonColor,
    required this.elevation,
    required this.controller,
  })
  • required this.backgroundColor:键盘的背景颜色。
  • required this.bottomPaddingColor:底部填充的颜色。
  • required this.bottomPaddingHeight:此参数定义键盘底部需要留出的空间高度。这个高度不计入键盘总高度
  • required this.keyboardHeight:键盘的总高度。
  • required this.keyboardWidth:键盘的总宽度。
  • required this.onChange:键盘值变化时执行的函数。
  • required this.onTapColor:按钮被点击时的颜色。
  • required this.textColor:键盘上显示字符的颜色。
  • required this.keybordButtonColor:键盘按钮的颜色。
  • required this.elevation:表示键盘中单个按键的阴影高度。
  • required this.controller:是否使用都需要传递。
  CKController controller = CKController();

重要事项

确保使用 CKController

额外信息

这是我第一次发布包,如果你想要添加一些功能,欢迎提出。

连接我

aashar wahla AasharWahla | YouTube AasharWahla | Twitter AasharWahla | LinkedIn AasharWahla | Instagram

访客计数

Loading

感谢


完整示例Demo

以下是一个完整的示例,展示了如何在Flutter应用中使用custom_keyboard插件:

import 'package:flutter/material.dart';
import 'package:custom_keyboard/custom_keyboard.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('自定义键盘示例')),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _text = '';
  final CKController _controller = CKController();

  void _onChange(String text) {
    setState(() {
      _text = text;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(_text),
        SizedBox(height: 20),
        CustomKeyboard(
          backgroundColor: Colors.grey[200],
          bottomPaddingColor: Colors.grey[300],
          bottomPaddingHeight: 20,
          keyboardHeight: 300,
          keyboardWidth: 400,
          onChange: _onChange,
          onTapColor: Colors.blue,
          textColor: Colors.black,
          keybordButtonColor: Colors.white,
          elevation: MaterialStateProperty.all(4.0),
          controller: _controller,
        ),
      ],
    );
  }
}

更多关于Flutter自定义键盘插件custom_keyboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义键盘插件custom_keyboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter中使用custom_keyboard插件的一个代码示例。这个插件允许你创建和自定义自己的键盘。

首先,确保你已经在pubspec.yaml文件中添加了custom_keyboard依赖:

dependencies:
  flutter:
    sdk: flutter
  custom_keyboard: ^latest_version  # 请替换为最新版本号

然后,运行flutter pub get来获取依赖。

接下来是一个简单的例子,展示如何使用custom_keyboard插件来创建一个自定义键盘,并在一个文本字段中使用它。

import 'package:flutter/material.dart';
import 'package:custom_keyboard/custom_keyboard.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Custom Keyboard Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _controller = TextEditingController();
  late CustomKeyboard _keyboard;

  @override
  void initState() {
    super.initState();
    // 初始化自定义键盘
    _keyboard = CustomKeyboard(
      layout: KeyboardLayout.numeric, // 使用数字布局
      config: KeyboardConfig(
        // 自定义键盘配置,比如按键大小、颜色等
        buttonColor: Colors.grey,
        buttonTextColor: Colors.white,
        textStyle: TextStyle(fontSize: 20),
        keyHeight: 50,
        keyWidth: 50,
      ),
      onKeyPress: (key) {
        setState(() {
          _controller.value = _controller.value.copyWith(
            text: _controller.text + key,
            selection: TextSelection.collapsed(offset: _controller.text.length),
            composing: TextRange.empty,
          );
        });
      },
      onBackspace: () {
        setState(() {
          if (_controller.text.isNotEmpty) {
            _controller.value = _controller.value.copyWith(
              text: _controller.text.substring(0, _controller.text.length - 1),
              selection: TextSelection.collapsed(
                offset: _controller.text.length - 1,
              ),
              composing: TextRange.empty,
            );
          }
        });
      },
      onCompleted: () {
        print('Completed input: $_controller.text');
      },
      onClose: () {
        print('Keyboard closed');
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Keyboard Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Enter text',
              ),
              inputFormatters: [
                FilteringTextInputFormatter.digitsOnly, // 仅允许数字
              ],
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                _keyboard.show(context);
              },
              child: Text('Show Keyboard'),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _keyboard.dispose(); // 释放键盘资源
    super.dispose();
  }
}

在这个示例中,我们做了以下几件事:

  1. 引入依赖:确保在pubspec.yaml中添加了custom_keyboard依赖。
  2. 初始化键盘:在initState方法中初始化CustomKeyboard实例,并配置它的布局、按键样式、以及按键点击事件的处理。
  3. 显示键盘:通过一个按钮点击事件来显示键盘。
  4. 处理键盘输入:在onKeyPress回调中处理键盘输入,更新文本字段的值。
  5. 资源清理:在dispose方法中释放键盘资源。

你可以根据需要进一步自定义键盘的布局和样式。希望这个示例对你有帮助!

回到顶部