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

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

使用说明

自定义键盘

在 Flutter 中,可以使用 CustomKeyBoard 来创建一个自定义键盘。以下是一个简单的示例:

const like = 'sample';
TextEditingController controller = TextEditingController();
CustomKeyBoard(
  controller: controller, // 必需的 TextEditingController
  maxLength: 12,
  backgroundColor: Colors.grey, 
  buttonColor: Colors.white,
  iconColor: Colors.black,
  backgroundOpacity: 0.3,
  textSize: 25,
  onSubmit: (){          // 必需的回调函数
    Navigator.pop(context);
  },
);

CustomKeyBoard 中,你可以更改键盘的长度、背景颜色、按钮颜色、图标颜色、背景透明度和文字大小。

数字键盘

对于数字键盘,可以使用 KNumPad。以下是一个简单的示例:

const like = 'sample';
TextEditingController controller = TextEditingController();
KNumPad(
  controller: controller, // 必需的 TextEditingController
  maxLength: 7,
  buttonSize: 130,
  isNotPhoneNumber: true,
  buttonColor: Colors.indigo,
  iconColor: Colors.amber,
  onSubmit: (){           // 必需的回调函数
    Navigator.pop(context);
  },
);

KNumPad 中,你可以更改按钮大小、按钮颜色、图标颜色和最大输入长度。你还可以通过 isNotPhoneNumber 参数来指定是否为电话号码输入。

完整示例代码

以下是在 Flutter 应用程序中使用 flutter_k_keyboard 插件的完整示例代码:

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'k_keyboard Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _textController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("k_keyboard"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            SizedBox(
              height: MediaQuery.of(context).size.height * 0.1,
              child: const Center(
                child: Text(
                  '你可以在下面输入文本',
                  style: TextStyle(
                    fontSize: 24,
                  ),
                ),
              ),
            ),
            SizedBox(
              height: MediaQuery.of(context).size.height * 0.1,
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: TextField(
                  controller: _textController,
                  style: Theme.of(context).textTheme.headlineMedium,
                  decoration: const InputDecoration(
                    hintText: '请输入文本',
                    enabledBorder: OutlineInputBorder(
                      borderSide: BorderSide(color: Colors.grey, width: 0.0),
                    ),
                  ),
                  onTap: () {
                    onOpenKeyBoard(
                      controller: _textController,
                      numericType: false,
                      // isNotPhoneNumber: true,
                    );
                  },
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }

  void onOpenKeyBoard({
    required TextEditingController controller,
    required bool numericType,
    bool isNotPhoneNumber = false,
  }) {
    var box = SizedBox(
      height: numericType
          ? MediaQuery.of(context).size.height * 0.4
          : MediaQuery.of(context).size.height * 0.25,
      child: numericType
          ? Center(
              child: KNumPad(
                controller: controller,
                maxLength: 11,
                buttonSize: 65,
                isNotPhoneNumber: isNotPhoneNumber,
                onSubmit: () {
                  Navigator.pop(context);
                },
              ),
            )
          : CustomKeyBoard(
              controller: controller,
              maxLength: 12,
              textSize: 15,
              onSubmit: () {
                Navigator.pop(context);
              },
            ),
    );
    showModalBottomSheet(
      elevation: 0,
      context: context,
      isScrollControlled: true,
      barrierColor: Colors.transparent,
      builder: (context) {
        return box;
      },
    );
  }
}

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

1 回复

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


flutter_k_keyboard 是一个用于Flutter的自定义键盘插件,允许开发者在应用中集成自定义键盘布局。这个插件可以用来替代系统默认的软键盘,适合需要特定键盘布局或功能的场景,如密码输入、数字键盘、特殊符号输入等。

安装

首先,你需要在 pubspec.yaml 文件中添加 flutter_k_keyboard 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_k_keyboard: ^latest_version

然后运行 flutter pub get 来安装插件。

基本用法

  1. 导入包

    在使用 flutter_k_keyboard 之前,首先需要导入包:

    import 'package:flutter_k_keyboard/flutter_k_keyboard.dart';
    
  2. 创建自定义键盘

    你可以通过继承 KKeyboardBase 类来创建自定义键盘。KKeyboardBase 提供了一个基础键盘类,你可以根据需求自定义键盘的布局和功能。

    class MyCustomKeyboard extends KKeyboardBase {
      MyCustomKeyboard({required super.context});
    
      @override
      Widget buildKeyboard(BuildContext context) {
        return Column(
          children: [
            Row(
              children: [
                Expanded(child: _buildKey('1')),
                Expanded(child: _buildKey('2')),
                Expanded(child: _buildKey('3')),
              ],
            ),
            Row(
              children: [
                Expanded(child: _buildKey('4')),
                Expanded(child: _buildKey('5')),
                Expanded(child: _buildKey('6')),
              ],
            ),
            Row(
              children: [
                Expanded(child: _buildKey('7')),
                Expanded(child: _buildKey('8')),
                Expanded(child: _buildKey('9')),
              ],
            ),
            Row(
              children: [
                Expanded(child: _buildKey('0')),
                Expanded(child: _buildKey('C', onPressed: _clearText)),
              ],
            ),
          ],
        );
      }
    
      Widget _buildKey(String text, {VoidCallback? onPressed}) {
        return ElevatedButton(
          onPressed: onPressed ?? () => _onKeyPressed(text),
          child: Text(text),
        );
      }
    
      void _onKeyPressed(String text) {
        // 处理按键事件
        updateText(text);
      }
    
      void _clearText() {
        // 清除文本
        clearText();
      }
    }
    
  3. 使用自定义键盘

    在需要使用自定义键盘的地方,你可以使用 KKeyboardWidget 来显示自定义键盘,并将其与输入字段关联:

    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      final TextEditingController _controller = TextEditingController();
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Custom Keyboard Example'),
          ),
          body: Column(
            children: [
              TextField(
                controller: _controller,
                decoration: InputDecoration(
                  labelText: 'Enter text',
                ),
                // 使用自定义键盘
                keyboardType: TextInputType.none, // 禁用系统键盘
              ),
              KKeyboardWidget(
                child: MyCustomKeyboard(context: context),
                controller: _controller,
              ),
            ],
          ),
        );
      }
    }
回到顶部