按清除()按钮时禁用键盘弹出

时间:2021-05-23 10:53:35

标签: flutter

我有一堆输入字段,它们逐行占据整个屏幕,最后我有“x”图标来清除输入字段。虽然一切正常,但有点笨拙,因为每次按下清除图标时,键盘都会弹出并占据手机屏幕一半以上的空间(我只是希望点击清除按钮后它保持自己的状态)。

在尝试解决我的问题时,我尝试使用 GestureDetector 和我发现的其他一些选项来解决这个问题,但没有找到任何有效的方法。

这是一段代码,其中定义了 onPressed 以查看发生了什么。您只需输入一些信息,然后用“x”图标清除它,该图标在调用 onPressed 时触发。我不确定是否有办法结合执行 FocusScope.of(context).requestFocus(FocusNode() );执行 dateController.clear() 后

          TextFormField(

            controller: dateController,
            validator: (value){
              if(value.isEmpty){
                return "Enter Valid Feedback";
              }else{
                return null;
              }
            },
            decoration: InputDecoration(
              hintText: "Datum",
              suffixIcon: IconButton(
                onPressed: () => dateController.clear(),

                icon: Icon(Icons.clear),
              ),
            ),
          ),

2 个答案:

答案 0 :(得分:0)

您可以通过在您的案例中使用 stopPropogation 来实现我们在 html 中习惯的 Stack 效果。

像这样,

Stack(children: [
  TextFormField(
    controller: dateController,
    validator: (value) {
      if (value.isEmpty) {
        return "Enter Valid Feedback";
      } else {
        return null;
      }
    },
    decoration: InputDecoration(
      hintText: "Datum",
    ),
  ),
  Align(
    alignment: Alignment.centerRight,
    child: IconButton(
      onPressed: () {
        dateController.clear();
      },
      icon: Icon(Icons.clear),
    ),
  ),
]),

由于您的 IconButton 现在位于 Stack 中,因此您的 TextFormField 不会注册该事件。

答案 1 :(得分:0)

您可以使用自定义 FocusNode 来控制输入字段的焦点。作为参考,请查看此 URL:https://flutter.dev/docs/cookbook/forms/focus。您必须为 TextField 设置自定义 FocusNode 并在按下清除按钮时调用 unfocus() 方法。

相关问题