我是个新手.

我正在使用以下小部件构建一个包含多个文本输入的表单:表单、TextFormField.出现的键盘没有显示"下一步"(应该将焦点转移到下一个字段)字段操作,而是"完成"操作(隐藏键盘).

我在官方文件中寻找了任何线索,没有发现任何直接可以做的事情. 我虽然登陆了FocusNode(cookbook,api doc).它提供了通过APP上的某个按钮或任何其他操作来切换焦点的机制,但我希望它在keyboard中.

推荐答案

找到了实现它的方法.

  1. 显示下一个图标而不是完成-将textInputAction参数设置为TextInputAction.next

  2. 使用onFieldSubmitted回调请求下一个字段的焦点 node .

    class FormWidget extends StatelessWidget{    
       final focus = FocusNode();
       @override
       Widget build(BuildContext context) {
        return Form(
          child: SingleChildScrollView(
            padding: EdgeInsets.symmetric(horizontal: 16.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                TextFormField(
                  textInputAction: TextInputAction.next,
                  autofocus: true,
                  decoration: InputDecoration(labelText: "Input 1"),
                  onFieldSubmitted: (v){
                    FocusScope.of(context).requestFocus(focus);
                  },
                ),
                TextFormField(
                  focusNode: focus,
                  decoration: InputDecoration(labelText: "Input 2"),
                ),
              ],
            ),
          ),
        );
      }
    }
    

编辑:正如文档(fltter.io/docs/cookbook/forms/Focus)中所述,我们还需要管理FocusNode生命周期.因此,在init()方法中使用init FocusNode,并在父Widget的Dispose()中使用Dispose.--@AntonDerevyanko

更新:没有FocusNodeFocusScopeNode也可以做到这一点,只需拨打FocusScope.of(context).nextFocus(),看看CopsOnRoad solution是如何做到这一点的.有关更多信息,请查看doc.

Flutter相关问答推荐

在Flutter Hive中将数据存储为对象与字符串的优点和缺点

Android Emulator冻结,但在调整窗口大小时解冻

本机调试符号包含无效的目录调试符号.目前仅支持Android ABI

Android Studio中的Ffltter&;Couchbase:进程C:/Program Files/Git/bin/bash以非零退出值35结束

如何在Flutter 中使用滚动展开窗口小部件

使索引[0]在ListViewBuilder中返回字符串1

Flutter类调用另一个类中的另一个方法失败

Flutter:我应该使用哪种应用内购买服务?

Flutter开发中,如何通过'nfc_manager'插件在Android设备上避免默认的New Tag Scanned弹出窗口?

在 Flutter 中,SpinEdit 叫什么?

Flutter 判断 Uint8List 是否有效 Image

启动画面中的淡入淡出图像

从子集合sem中获取参考学年&&课程名称的值

如何删除图像边框半径与其父容器边框半径之间的空白

在 Flutter 中读取 Firebase 数据库数据时遇到问题

应用程序和应用程序内的 webview 之间的单点登录

在 flutter 的另一个类中使用变量值

Flutter HLS .m3u8 视频无法实时播放

如何在 Flutter 中将列小部件添加到行小部件?

为什么容器会填满整个空间?