Flutter自定义软键盘插件soft_keyboard的使用

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

Flutter自定义软键盘插件soft_keyboard的使用

介绍

soft_keyboard 是一个可自定义的软键盘插件,可以替代手机自带的不可定制的键盘。该插件目前仍在开发中,但已经提供了许多自定义选项,允许开发者根据需求调整键盘的外观和行为。

功能特性

  • 自定义背景颜色:可以设置键盘的背景颜色。
  • 自定义按键颜色:可以选择按键的颜色。
  • 提供操作键的图标:可以通过 IconData 设置操作键(如回车、删除等)的图标。
  • 自定义键盘文本样式:可以根据需要调整键盘上显示的文本样式。
  • 调整键盘高度:可以设置键盘的高度。
  • 选择字母数字键盘或数字键盘:可以选择使用字母数字键盘或纯数字键盘。

快速开始

1. 添加依赖

pubspec.yaml 文件中添加 soft_keyboard 依赖:

dependencies:  
  soft_keyboard: any  
2. 导入包

在 Dart 文件中导入 soft_keyboard 包:

import 'package:soft_keyboard/soft_keyboard.dart';  

使用示例

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 soft_keyboard 插件。该示例包含了一个字母数字键盘和一个数字键盘,并且可以在输入框中显示用户输入的内容。

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:soft_keyboard/soft_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: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MainScreen(),
    );
  }
}

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

  [@override](/user/override)
  State<MainScreen> createState() => _MainScreenState();
}

class _MainScreenState extends State<MainScreen> {
  final TextEditingController _controller = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          // 输入框,用于显示用户输入的内容
          Expanded(
            child: Center(
              child: TextField(
                controller: _controller,
                readOnly: true, // 禁止用户直接编辑输入框
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: '输入内容',
                ),
              ),
            ),
          ),

          // 字母数字键盘
          AlphanumericKeyboard(
            controller: _controller, // 绑定输入框的控制器
            onEnterTapped: () { // 当用户点击“Enter”键时触发
              log("hide keyboard"); // 打印日志
            },
            height: 260, // 设置键盘高度
            backgroundColor: Colors.black, // 设置键盘背景颜色
            actionKeyColor: Colors.blueGrey, // 设置操作键(如回车、删除)的颜色
            alphanumericKeyColor: Colors.indigo, // 设置字母数字键的颜色
            backspaceKeyIcon: Icons.backspace, // 设置删除键的图标
            enterKeyIcon: Icons.keyboard_return, // 设置回车键的图标
          ),

          // 数字键盘
          NumericKeyboard(
            controller: _controller, // 绑定输入框的控制器
            onEnterTapped: () { // 当用户点击“Enter”键时触发
              log("hide keyboard"); // 打印日志
            },
            backgroundColor: Colors.black, // 设置键盘背景颜色
            actionKeyColor: Colors.blueGrey, // 设置操作键(如回车、删除)的颜色
            backspaceKeyIcon: Icons.backspace, // 设置删除键的图标
            enterKeyIcon: Icons.keyboard_return, // 设置回车键的图标
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中集成和使用自定义软键盘插件 soft_keyboard 的示例代码。这个示例将展示如何创建一个简单的自定义键盘并处理输入事件。

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

dependencies:
  flutter:
    sdk: flutter
  soft_keyboard: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,在你的 Flutter 项目中创建一个新的自定义键盘类,并实现键盘的逻辑。以下是一个基本的示例:

1. 创建自定义键盘类

创建一个名为 custom_keyboard.dart 的文件,并添加以下代码:

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

class CustomKeyboard extends StatefulWidget {
  @override
  _CustomKeyboardState createState() => _CustomKeyboardState();
}

class _CustomKeyboardState extends State<CustomKeyboard> {
  final TextEditingController _controller = TextEditingController();
  String _inputText = '';

  @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:',
              ),
              onEditingComplete: () {
                setState(() {
                  _inputText = _controller.text;
                });
              },
            ),
            SizedBox(height: 16),
            Expanded(
              child: SoftKeyboard(
                keyboardActions: _buildKeyboardActions(),
                onTextInput: (text) {
                  setState(() {
                    _controller.value = TextEditingValue(
                      text: _controller.text + text,
                      selection: TextSelection.fromPosition(
                        TextPosition(
                          offset: _controller.text.length + text.length,
                        ),
                      ),
                      composing: TextRange.empty,
                    );
                  });
                },
                onBackspace: () {
                  setState(() {
                    if (_controller.text.isNotEmpty) {
                      _controller.value = TextEditingValue(
                        text: _controller.text.substring(
                          0,
                          _controller.text.length - 1,
                        ),
                        selection: TextSelection.fromPosition(
                          TextPosition(
                            offset: _controller.text.length - 1,
                          ),
                        ),
                        composing: TextRange.empty,
                      );
                    }
                  });
                },
                onDone: () {
                  // Handle done action, e.g., hide keyboard or submit form
                },
              ),
            ),
          ],
        ),
      ),
    );
  }

  List<KeyboardAction> _buildKeyboardActions() {
    return [
      KeyboardAction(
        text: '1',
        key: '1',
      ),
      KeyboardAction(
        text: '2',
        key: '2',
      ),
      KeyboardAction(
        text: '3',
        key: '3',
      ),
      KeyboardAction(
        text: '4',
        key: '4',
      ),
      KeyboardAction(
        text: '5',
        key: '5',
      ),
      KeyboardAction(
        text: '6',
        key: '6',
      ),
      KeyboardAction(
        text: '7',
        key: '7',
      ),
      KeyboardAction(
        text: '8',
        key: '8',
      ),
      KeyboardAction(
        text: '9',
        key: '9',
      ),
      KeyboardAction(
        text: '0',
        key: '0',
      ),
      KeyboardAction(
        text: 'Backspace',
        key: 'backspace',
        isSpecialAction: true,
      ),
      KeyboardAction(
        text: 'Done',
        key: 'done',
        isSpecialAction: true,
      ),
    ];
  }
}

2. 使用自定义键盘

在你的主应用文件(例如 main.dart)中,导入并使用这个自定义键盘:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Custom Keyboard Demo'),
        ),
        body: Center(
          child: CustomKeyboard(),
        ),
      ),
    );
  }
}

运行应用

现在,你可以运行你的 Flutter 应用,应该会看到一个简单的输入框和一个自定义的数字键盘。你可以点击键盘上的按钮来在输入框中输入数字,点击“Backspace”按钮删除字符,以及点击“Done”按钮(尽管在这个示例中没有处理“Done”按钮的具体逻辑)。

这个示例只是一个简单的起点,你可以根据需要进一步扩展和自定义你的键盘功能,例如添加更多类型的按键、处理不同的输入模式(如字母、符号等),以及实现更复杂的输入逻辑。

回到顶部