【问题标题】:Clear controller textfield flutter清除控制器文本字段颤动
【发布时间】:2021-08-23 04:01:59
【问题描述】:

我遇到了一些奇怪的事情。我的应用程序中有文本字段,可以毫无问题地清除,一旦清除,删除图标就会消失。 但是,当我想清除 AlertDialog 中的文本字段时,文本会被清除,但要删除的图标仍然存在。

final TextEditingController _namespaceController = TextEditingController();

  void clearNamespaceController() {
    _namespaceController.clear();
    setState(() {});
  }
Widget _displayDialogForEdition(result, index, context) {
    return IconButton(
        icon: Icon(Icons.edit),
        onPressed: () {
          setState(() {
            _namespaceController.text = result[index].name;
          });

          showDialog<String>(
            context: context,
            builder: (BuildContext context) => AlertDialog(
              title: const Text("Modification d'une configuration"),
              content: Container(
                // padding: EdgeInsets.all(16),
                child: TextField(
                  controller: _namespaceController,
                  decoration: InputDecoration(
                      prefixIcon: Icon(Icons.search, color: Theme.of(context).primaryColor),
                      border: OutlineInputBorder(),
                      labelText: 'Exclure le Namespace',
                      suffixIcon: _namespaceController.text.length == 0
                          ? null
                          : IconButton(
                              icon: Icon(Icons.clear),
                              onPressed: clearNamespaceController,
                            ),
                      labelStyle: Theme.of(context).textTheme.headline6),
                ),
              ),
              actions: <Widget>[
                TextButton(
                  onPressed: () => Navigator.pop(context, 'Cancel'),
                  child: const Text('Cancel'),
                ),
                TextButton(
                  onPressed: () => Navigator.pop(context, 'OK'),
                  child: const Text('OK'),
                ),
              ],
            ),
          );
        });
  }

【问题讨论】:

  • 那是因为你 Focus 停留在那个领域。另外,我认为您无法删除 prefixIcon 其隐藏的 prefix,直到有东西点击 TextField
  • 谢谢,好的,我需要分散注意力才能让它出现。我不想删除prefixIcon,而是suffixIcon。您可以作为答案,我会验证,谢谢

标签: flutter flutter-alertdialog


【解决方案1】:

您需要使用StatefulBuilder() 才能在AlertBox() 中使用setState()。使用StatefulBuilder() 它只构建您的AlertBox() 的用户界面。如果您不使用StatefulBuilder(),如果您检查_controller.text==0 并更改您的图标,则AlertBox() 的用户界面不会更新。 你可以这样使用。

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

你可以试试here

【讨论】:

    【解决方案2】:

    那是因为你的TextField 持有Focus 你需要unfocus 才能得到你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多