我有一堆输入字段,它们逐行占据整个屏幕,最后我有“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),
),
),
),
答案 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()
方法。