Flutter数字键盘插件flutter_keyboard_nums的使用

Flutter数字键盘插件flutter_keyboard_nums的使用

Keboard Image Numpad and Special Symbol Image

Windows 和 Linux 上的数字键盘、特殊符号键盘。

使用方法

在使用 flutter_keyboard_nums 插件时,可以通过 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 中,你可以修改长度、背景颜色、按钮颜色、图标颜色、背景透明度和文本大小。

SepcialSymbolNumPad 中,你可以修改按钮大小、按钮颜色、图标颜色、最大长度。你还可以通过 bool isNotPhoneNumber 参数来指定输入的是电话号码还是纯数字。

完整示例

以下是一个完整的示例,展示了如何在 Flutter 应用程序中使用 flutter_keyboard_nums 插件。

import 'package:flutter/material.dart';
import 'package:flutter_keyboard_nums/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_keyboard_nums的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


flutter_keyboard_nums 是一个用于在 Flutter 应用中显示数字键盘的插件。这个插件可以帮助你轻松地在应用中集成一个自定义的数字键盘,通常用于输入 PIN 码、密码或其他需要数字输入的场景。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  flutter_keyboard_nums: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

使用插件

以下是一个简单的示例,展示如何使用 flutter_keyboard_nums 插件来显示一个数字键盘并处理输入。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Keyboard Nums Example'),
        ),
        body: Center(
          child: NumberInputField(),
        ),
      ),
    );
  }
}

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

class _NumberInputFieldState extends State<NumberInputField> {
  TextEditingController _controller = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        TextField(
          controller: _controller,
          readOnly: true, // 使文本框只读,防止用户手动输入
          decoration: InputDecoration(
            labelText: 'Enter your PIN',
            border: OutlineInputBorder(),
          ),
        ),
        SizedBox(height: 20),
        SizedBox(
          width: 300,
          height: 400,
          child: KeyboardNums(
            onTextInput: (text) {
              setState(() {
                _controller.text += text;
              });
            },
            onBackspace: () {
              setState(() {
                if (_controller.text.isNotEmpty) {
                  _controller.text = _controller.text.substring(0, _controller.text.length - 1);
                }
              });
            },
          ),
        ),
      ],
    );
  }
}
回到顶部