Flutter-如何在Flutter中的数字键盘中添加完成按钮

pra*_*n r 6 dart flutter

我试图在数字类型输入中为flutter中的TextFormField添加完成按钮,但我无法做到这一点。请提供解决方案的帮助。

码:

TextFormField(
          key: Key(keyValue),
          initialValue: valueBuilder,
          onSaved: (text) {
            fieldsController.text = text.trim();
          },
          inputFormatters: [inputFormatters],
          keyboardType: TextInputType.phoneNumber,)
Run Code Online (Sandbox Code Playgroud)

我想创建一个键盘像这样。用于输入文本表单字段。

小智 16

改变

keyboardType: TextInputType.number
Run Code Online (Sandbox Code Playgroud)

keyboardType: TextInputType.numberWithOptions(signed: true, decimal: true)
Run Code Online (Sandbox Code Playgroud)

  • 使用此解决方案,键盘上将出现数字和其他字符,而不仅仅是数字 (11认同)
  • 您只需要“signed: true”即可触发此解决方法。 (3认同)

Osa*_*awi 16

这是在键盘打开时添加“完成”按钮的方法:TextFormField

\n
textInputAction: TextInputAction.done,\n
Run Code Online (Sandbox Code Playgroud)\n

请记住,iOS 不\xe2\x80\x99t 支持键盘上的“完成”NUMERIC

\n


小智 15

add this to your TextField

TextField(
...
keyboardType: TextInputType.numberWithOptions(signed: true),
inputFormatters: [
    FilteringTextInputFormatter.digitsOnly,
],
...
),
Run Code Online (Sandbox Code Playgroud)


die*_*per 12

我刚刚创建了一个包,用于向当前键盘添加基本操作。

在此处输入图片说明

你可以看看这里:

https://pub.dartlang.org/packages/keyboard_actions

用法 :

    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",
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ),
        );
      }
Run Code Online (Sandbox Code Playgroud)

  • 酒吧页面上确实没有太多解释。只是一堆代码。我想 Flutter 专业人士应该没问题,但 README 对初学者不太友好。 (3认同)

Toh*_*eeb 8

你不需要一个done按钮只需MaterialApp用一个GestureDetector

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(),
     ),
);
Run Code Online (Sandbox Code Playgroud)

  • 这将使应用程序变得相当卡顿,最好在根视图小部件周围谨慎使用它。 (2认同)

Blo*_*oss 6

我用这种方式来处理IOS中的完成按钮

      keyboardType: Platform.isIOS? 
                    TextInputType.numberWithOptions(signed: true, decimal: true)
                  : TextInputType.number,
// This regex for only amount (price). you can create your own regex based on your requirement
     inputFormatters: [FilteringTextInputFormatter.allow(RegExp(r'^\d+\.?\d{0,4}'))],
Run Code Online (Sandbox Code Playgroud)