Flutter 清除控制器文本场颤振
我面临着一些奇怪的事情。我的应用程序中有文本字段,可以毫无问题地清除,一旦清除,删除图标就会消失。 但是,当我想清除AlertDialog中的文本字段时,文本将被清除,但要删除的图标将保持打开状态Flutter 清除控制器文本场颤振,flutter,flutter-alertdialog,Flutter,Flutter Alertdialog,我面临着一些奇怪的事情。我的应用程序中有文本字段,可以毫无问题地清除,一旦清除,删除图标就会消失。 但是,当我想清除AlertDialog中的文本字段时,文本将被清除,但要删除的图标将保持打开状态 final TextEditingController _namespaceController = TextEditingController(); void clearNamespaceController() { _namespaceController.clear();
final TextEditingController _namespaceController = TextEditingController();
void clearNamespaceController() {
_namespaceController.clear();
setState(() {});
}
Widget\u displayDialogForEdition(结果、索引、上下文){
返回图标按钮(
图标:图标(Icons.edit),
已按下:(){
设置状态(){
_namespaceController.text=结果[索引].name;
});
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文)=>AlertDialog(
标题:const Text(“修改une配置”),
内容:容器(
//填充:边缘设置。全部(16),
孩子:TextField(
控制器:_名称空间控制器,
装饰:输入装饰(
前缀:图标(Icons.search,color:Theme.of(context.primaryColor),
边框:OutlineInputBorder(),
labelText:'Exclure le命名空间',
后缀:_namespaceController.text.length==0
无效的
:图标按钮(
图标:图标(图标。清除),
onPressed:clearNamespaceController,
),
标签样式:Theme.of(context.textTheme.headline6),
),
),
行动:[
文本按钮(
onPressed:()=>Navigator.pop(上下文“取消”),
子项:常量文本(“取消”),
),
文本按钮(
onPressed:()=>Navigator.pop(上下文“OK”),
子项:常量文本('OK'),
),
],
),
);
});
}
您需要使用
StatefulBuilder()
才能在AlertBox()中使用setState()
。使用StatefulBuilder()。如果不使用StatefulBuilder()
如果选中\u控制器,则AlertBox()的UI将不会更新。text==0
并更改图标。
你可以这样用
showDialog(
context: context,
builder: (ctx) {
bool isTextClear = true;
return StatefulBuilder(builder: (ctx, setState) {
return AlertDialog(
title: Text("Add name"),
content: Container(
child: TextField(
controller: _controller,
onChanged: (val) {
setState(
() {
if (_controller.text.isEmpty) {
isTextClear = true;
} else {
isTextClear = false;
}
},
);
},
decoration: InputDecoration(
labelText: "Name",
prefixIcon: Icon(Icons.search),
suffixIcon: isTextClear
? null
: IconButton(
onPressed: () {
setState(() {
isTextClear = true;
_controller.clear();
});
},
icon: Icon(
Icons.clear,
),
),
),
),
),
);
});
},
);
您可以尝试这是因为您的TextField
持有焦点
您需要取消焦点
,以获得您想要的。这是因为您的焦点
停留在该字段上。另外,我不认为你可以删除前缀
它的前缀
,它是隐藏的,直到有东西点击文本字段
谢谢好的,就是这样,我需要取消焦点使它出现。我不想删除前缀,但要删除后缀。你可以把它作为答案,我会验证,谢谢
showDialog(
context: context,
builder: (ctx) {
bool isTextClear = true;
return StatefulBuilder(builder: (ctx, setState) {
return AlertDialog(
title: Text("Add name"),
content: Container(
child: TextField(
controller: _controller,
onChanged: (val) {
setState(
() {
if (_controller.text.isEmpty) {
isTextClear = true;
} else {
isTextClear = false;
}
},
);
},
decoration: InputDecoration(
labelText: "Name",
prefixIcon: Icon(Icons.search),
suffixIcon: isTextClear
? null
: IconButton(
onPressed: () {
setState(() {
isTextClear = true;
_controller.clear();
});
},
icon: Icon(
Icons.clear,
),
),
),
),
),
);
});
},
);