Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 颤振-如何在颤振中的数字键盘中添加完成按钮_Dart_Flutter - Fatal编程技术网

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,
],