Flutter虚拟键盘插件drago_virtual_keyboard的使用
Flutter虚拟键盘插件drago_virtual_keyboard的使用
介绍
drago_virtual_keyboard 是一个简单的包,用于在设备(如自助服务终端和ATM机)上显示虚拟键盘。该库用Dart编写,并且没有本地代码依赖。
虚拟键盘提供了基本的功能以显示屏幕上的虚拟键盘。事件管理应在项目级别进行。
参考
DragoVirtualKeyboard
Flutter小部件,用于显示虚拟键盘。
// 键盘类型:可以是数字或字母数字。
VirtualKeyboardType type
// 按键事件回调。按键时调用此函数并传入按下的`Key`对象。
Function onKeyPress;
// 虚拟键盘高度。默认为300。
double height;
// 键文字和图标的颜色。
Color textColor;
// 键盘键的文字大小。
double fontSize;
// 仅启用大写字母。
bool alwaysCaps;
VirtualKeyboardType
可用虚拟键盘类型的枚举。
// 仅数字。
VirtualKeyboardType.Numeric
// 字母数字:字母 `[A-Z]` + 数字 `[0-9]` + `@` + `.`。
VirtualKeyboardType.Alphanumeric
VirtualKeyboardKey
虚拟键盘键。
// 键的文字。
String text
// 键的大写文字。
String capsText;
// 动作或字符串
VirtualKeyboardKeyType keyType;
// 键的动作。
VirtualKeyboardKeyAction action;
VirtualKeyboardKeyType
虚拟键盘键的类型。
// 可以是动作键 - 返回、退格等。
VirtualKeyboardKeyType.Action
// 包含文本值的键 - 字母、数字、逗号等。
VirtualKeyboardKeyType.String
VirtualKeyboardKeyAction
虚拟键盘操作。
/// 虚拟键盘操作。
enum VirtualKeyboardKeyAction { Backspace, Return, Shift, Space }
使用
显示字母数字键盘(默认视图)
// 将键盘包装在Container中以设置背景色。
Container(
// 键盘是透明的
color: Colors.deepPurple,
child: DragoVirtualKeyboard(
// 默认高度为300
height: 350,
// 默认为黑色
textColor: Colors.white,
// 默认14
fontSize: 20,
// [A-Z, 0-9]
type: VirtualKeyboardType.Alphanumeric,
// 按键事件回调
onKeyPress: _onKeyPress),
)
显示数字键盘(默认视图)
Container(
// 键盘是透明的
color: Colors.red,
child: DragoVirtualKeyboard(
// [0-9] + .
type: VirtualKeyboardType.Numeric,
// 按键事件回调
onKeyPress: (key) => print(key.text)),
)
显示字母数字键盘(自定义键)
Container(
color: Colors.deepPurple,
child: DragoVirtualKeyboard(
height: keyboardHeight,
textColor: Colors.white,
fontSize: 20,
builder: _builder,
type: VirtualKeyboardType.Numeric,
onKeyPress: _onKeyPress),
)
/// 键盘键的构建器。
Widget _builder(BuildContext context, VirtualKeyboardKey key) {
Widget keyWidget;
switch (key.keyType) {
case VirtualKeyboardKeyType.String:
// 绘制字符串键。
keyWidget = _keyboardDefaultKey(key);
break;
case VirtualKeyboardKeyType.Action:
// 绘制动作键。
keyWidget = _keyboardDefaultActionKey(key);
break;
}
return keyWidget;
}
onKeyPressed 事件基本使用示例
// 仅作为局部变量。使用Text小部件或其他类似方式在UI中显示。
String text;
/// 当虚拟键盘键被按下时触发。
_onKeyPress(VirtualKeyboardKey key) {
if (key.keyType == VirtualKeyboardKeyType.String) {
text = text + (shiftEnabled ? key.capsText : key.text);
} else if (key.keyType == VirtualKeyboardKeyType.Action) {
switch (key.action) {
case VirtualKeyboardKeyAction.Backspace:
if (text.length == 0) return;
text = text.substring(0, text.length - 1);
break;
case VirtualKeyboardKeyAction.Return:
text = text + '\n';
break;
case VirtualKeyboardKeyAction.Space:
text = text + key.text;
break;
case VirtualKeyboardKeyAction.Shift:
shiftEnabled = !shiftEnabled;
break;
default:
}
}
// 更新屏幕
setState(() {});
}
完整示例
以下是一个完整的示例,展示了如何使用 drago_virtual_keyboard 插件:
import 'package:flutter/material.dart';
import 'package:drago_virtual_keyboard/drago_virtual_keyboard.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Virtual Keyboard Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Virtual Keyboard Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
MyHomePageState createState() => MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
// 用户输入的文本。
String text = '';
// 是否启用大写。
bool shiftEnabled = false;
// 是否显示数字键盘。
bool isNumericMode = true;
bool isOnchange = false;
bool isTransparent = false;
bool IsCaps = false;
late TextEditingController _controllerText;
var keyboardType = VirtualKeyboardType.Alphanumeric;
[@override](/user/override)
void initState() {
_controllerText = TextEditingController();
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Row(
children: <Widget>[
SizedBox(
width: 500,
child: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
child: TextField(
controller: _controllerText,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Your text',
),
)),
SwitchListTile(
title: Text('Is Onchange'),
value: isOnchange,
onChanged: (val) {
setState(() {
isOnchange = !isOnchange;
});
}),
SwitchListTile(
title: Text('Is Transparent'),
value: isTransparent,
onChanged: (val) {
isTransparent = !isTransparent;
setState(() {});
}),
SwitchListTile(
title: Text('Is Caps'),
value: IsCaps,
onChanged: (val) {
IsCaps = !IsCaps;
setState(() {});
}),
SizedBox(height: 10),
TextButton(
onPressed: () {
setState(() {
keyboardType = VirtualKeyboardType.Numeric;
});
},
child: Text('Numeric Keyboard')),
SizedBox(height: 10),
TextButton(
onPressed: () {
setState(() {
keyboardType = VirtualKeyboardType.Alphanumeric;
});
},
child: Text('AlphaNumeric Keyboard')),
SizedBox(height: 10),
TextButton(
onPressed: () {
setState(() {
keyboardType = VirtualKeyboardType.OnScreenAlphaNumeric;
});
},
child: Text('Onscreen AlphaNumeric Keyboard'))
],
),
),
Expanded(
child: Center(
child: Container(
width: keyboardType == VirtualKeyboardType.Numeric ? 300 : null,
color: isTransparent ? Colors.transparent : Colors.deepPurple,
child: DragoVirtualKeyboard(
key: UniqueKey(),
textColor: isTransparent ? Colors.deepPurple : Colors.white,
fontSize: isTransparent ? 19 : 17,
type: keyboardType,
isOnChange: isOnchange,
alwaysCaps: IsCaps,
onReturn: (val) {
_controllerText.text = val;
},
),
),
),
)
],
),
),
);
}
}
更多关于Flutter虚拟键盘插件drago_virtual_keyboard的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter虚拟键盘插件drago_virtual_keyboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用drago_virtual_keyboard
插件的示例代码。这个插件允许你在Flutter应用中集成一个自定义的虚拟键盘。
首先,你需要在你的pubspec.yaml
文件中添加这个插件的依赖:
dependencies:
flutter:
sdk: flutter
drago_virtual_keyboard: ^最新版本号 # 请替换为当前最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用这个插件。下面是一个简单的示例,展示了如何集成和使用这个虚拟键盘。
import 'package:flutter/material.dart';
import 'package:drago_virtual_keyboard/drago_virtual_keyboard.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final TextEditingController _controller = TextEditingController();
String _text = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Drago Virtual 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(() {
_text = _controller.text;
});
},
),
SizedBox(height: 16),
Text(
'Output:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
Text(
_text,
style: TextStyle(fontSize: 16),
),
SizedBox(height: 16),
Expanded(
child: DragoVirtualKeyboard(
onKeyPress: (key) {
setState(() {
_controller.value = _controller.value.copyWith(
text: _controller.text + key,
selection: TextSelection.collapsed(
offset: _controller.text.length + key.length,
),
composing: TextRange.empty,
);
_text = _controller.text + key;
});
},
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,
);
_text = _controller.text;
}
});
},
onClear: () {
setState(() {
_controller.clear();
_text = '';
});
},
keyboardType: DragoKeyboardType.normal, // 你可以根据需要更改为其他类型,如numeric
),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,包含一个TextField
用于输入文本,以及一个DragoVirtualKeyboard
作为虚拟键盘。当用户在虚拟键盘上按下键时,输入文本会更新到TextField
和显示区域。
请注意,DragoVirtualKeyboard
的onKeyPress
、onBackspace
和onClear
回调用于处理键盘输入事件。你可以根据需要调整这些回调逻辑。
希望这个示例能帮助你在Flutter项目中成功集成和使用drago_virtual_keyboard
插件!