Dart 颤振-如何在颤振中的数字键盘中添加完成按钮
我正在尝试为颤振中的Dart 颤振-如何在颤振中的数字键盘中添加完成按钮,dart,flutter,Dart,Flutter,我正在尝试为颤振中的TextFormField在数字类型输入中添加done按钮,但我无法做到这一点 TextFormField( key: Key(keyValue), initialValue: valueBuilder, onSaved: (text) { fieldsController.text = text.trim(); }, inputFormatters:
TextFormField
在数字类型输入中添加done
按钮,但我无法做到这一点
TextFormField(
key: Key(keyValue),
initialValue: valueBuilder,
onSaved: (text) {
fieldsController.text = text.trim();
},
inputFormatters: [inputFormatters],
keyboardType: TextInputType.phoneNumber,)
我想创建一个如下所示的键盘。用于输入文本表单字段
我刚刚创建了一个包,用于向当前键盘添加基本操作 您可以在这里查看: 用法:
import 'package:flutter/material.dart';
import 'package:keyboard_actions/keyboard_actions.dart';
//...
FocusNode _nodeText1 = FocusNode();
FocusNode _nodeText2 = FocusNode();
FocusNode _nodeText3 = FocusNode();
FocusNode _nodeText4 = FocusNode();
FocusNode _nodeText5 = FocusNode();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Keyboard Actions Sample"),
),
body: FormKeyboardActions(
keyboardActionsPlatform: KeyboardActionsPlatform.ALL, //optional
keyboardBarColor: Colors.grey[200], //optional
nextFocus: true, //optional
actions: [
KeyboardAction(
focusNode: _nodeText1,
),
KeyboardAction(
focusNode: _nodeText2,
closeWidget: IconButton(
icon: Icon(Icons.close),
onPressed: () {},
),
),
KeyboardAction(
focusNode: _nodeText3,
onTapAction: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text("Custom Action"),
actions: <Widget>[
FlatButton(
child: Text("OK"),
onPressed: () => Navigator.of(context).pop(),
)
],
);
});
},
),
KeyboardAction(
focusNode: _nodeText4,
displayCloseWidget: false,
),
KeyboardAction(
focusNode: _nodeText5,
closeWidget: Padding(
padding: EdgeInsets.all(5.0),
child: Text("CLOSE"),
),
),
],
child: Padding(
padding: const EdgeInsets.all(15.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
TextField(
keyboardType: TextInputType.number,
focusNode: _nodeText1,
decoration: InputDecoration(
hintText: "Input Number",
),
),
TextField(
keyboardType: TextInputType.text,
focusNode: _nodeText2,
decoration: InputDecoration(
hintText: "Input Text with Custom Close Widget",
),
),
TextField(
keyboardType: TextInputType.number,
focusNode: _nodeText3,
decoration: InputDecoration(
hintText: "Input Number with Custom Action",
),
),
TextField(
keyboardType: TextInputType.text,
focusNode: _nodeText4,
decoration: InputDecoration(
hintText: "Input Text without Close Widget",
),
),
TextField(
keyboardType: TextInputType.number,
focusNode: _nodeText5,
decoration: InputDecoration(
hintText: "Input Number with Custom Close Widget",
),
),
],
),
),
),
),
);
}
导入“包装:颤振/材料.省道”;
导入“包:键盘动作/键盘动作.dart”;
//...
FocusNode_nodeText1=FocusNode();
FocusNode_nodeText2=FocusNode();
FocusNode_nodeText3=FocusNode();
FocusNode_nodeText4=FocusNode();
FocusNode_nodeText5=FocusNode();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“键盘操作示例”),
),
正文:FormKeyboardActions(
keyboardActionsPlatform:keyboardActionsPlatform.ALL,//可选
keyboardBarColor:Colors.grey[200],//可选
nextFocus:true,//可选
行动:[
键盘动作(
焦点节点:_nodeText1,
),
键盘动作(
焦点节点:_nodeText2,
closeWidget:IconButton(
图标:图标(Icons.close),
按下:(){},
),
),
键盘动作(
焦点节点:_nodeText3,
onTapAction:(){
显示对话框(
上下文:上下文,
生成器:(上下文){
返回警报对话框(
内容:文本(“自定义操作”),
行动:[
扁平按钮(
孩子:文本(“OK”),
onPressed:()=>Navigator.of(context.pop(),
)
],
);
});
},
),
键盘动作(
焦点节点:_nodeText4,
displayCloseWidget:false,
),
键盘动作(
焦点节点:_nodeText5,
closeWidget:填充(
填充:所有边缘设置(5.0),
子项:文本(“关闭”),
),
),
],
孩子:填充(
填充:常数边集全部(15.0),
子:SingleChildScrollView(
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
文本字段(
键盘类型:TextInputType.number,
焦点节点:_nodeText1,
装饰:输入装饰(
hintText:“输入编号”,
),
),
文本字段(
键盘类型:TextInputType.text,
焦点节点:_nodeText2,
装饰:输入装饰(
hintText:“使用自定义关闭小部件输入文本”,
),
),
文本字段(
键盘类型:TextInputType.number,
焦点节点:_nodeText3,
装饰:输入装饰(
hintText:“使用自定义操作输入编号”,
),
),
文本字段(
键盘类型:TextInputType.text,
焦点节点:_nodeText4,
装饰:输入装饰(
hintText:“在不关闭小部件的情况下输入文本”,
),
),
文本字段(
键盘类型:TextInputType.number,
焦点节点:_nodeText5,
装饰:输入装饰(
hintText:“使用自定义关闭小部件输入编号”,
),
),
],
),
),
),
),
);
}
更改
keyboardType: TextInputType.number
到
在
iOS
中没有done
按钮,但我们可以检查输入的长度并清除focus
以隐藏数字键盘。
实现如下(它将使用固定长度的数值)
你不需要一个
done
按钮,只要用gesturedector
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus &&
currentFocus.focusedChild != null) {
FocusManager.instance.primaryFocus.unfocus();
}
},
child: MaterialApp(
title: "My title",
home:MyHomeScreen(),
),
);
请试着换一下
inputType: const TextInputType.numberWithOptions(signed: true),
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.digitsOnly,
],
inputType:const TextInputType.numberWithOptions(签名:true),
输入格式化程序:[
FilteringPutFormatter.digitsOnly,
],
您是否尝试过在表单字段上设置文本输入
?keyboardType:TextInputType.number,textInputAction:textInputAction.done,是的,但这在IOS平台上也不起作用,因为mac OS不支持数字键盘中的此类UI,因此正在寻找解决方案使用-我使用的是textform字段,这很容易处理字段的验证部分,因此,替换为cupertinoTextField将使我的验证工作变得困难。您的答案与问题无关。我认为这是一个很好的临时解决方案,适用于iOS数字键盘上的内置“完成”按钮。您只需signed:true
即可触发此解决方案。
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus &&
currentFocus.focusedChild != null) {
FocusManager.instance.primaryFocus.unfocus();
}
},
child: MaterialApp(
title: "My title",
home:MyHomeScreen(),
),
);
inputType: const TextInputType.numberWithOptions(signed: true),
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.digitsOnly,
],