Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 清除控制器文本场颤振_Flutter_Flutter Alertdialog - Fatal编程技术网

Flutter 清除控制器文本场颤振

Flutter 清除控制器文本场颤振,flutter,flutter-alertdialog,Flutter,Flutter Alertdialog,我面临着一些奇怪的事情。我的应用程序中有文本字段,可以毫无问题地清除,一旦清除,删除图标就会消失。 但是,当我想清除AlertDialog中的文本字段时,文本将被清除,但要删除的图标将保持打开状态 final TextEditingController _namespaceController = TextEditingController(); void clearNamespaceController() { _namespaceController.clear();

我面临着一些奇怪的事情。我的应用程序中有文本字段,可以毫无问题地清除,一旦清除,删除图标就会消失。 但是,当我想清除AlertDialog中的文本字段时,文本将被清除,但要删除的图标将保持打开状态

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,
                                  ),
                                ),
                        ),
                      ),
                    ),
                  );
                });
              },
            );