TextField errorText未显示

时间:2019-06-14 12:19:14

标签: flutter dart

我正在做一个基本的应用程序,但是不能正常工作。我有一个TextField,但我不希望它为空。我有一个textController,我使用errorText,但无法正常工作。  Mi代码是:

 void changeDesc() { showDialog(
      context: context,
      builder: (context) {
        return AlertDialog(
          title: Text('New description'),
          content: TextField(
            controller: _textController,
            decoration: InputDecoration(
              hintText: "description",
              errorText: descriptionIncorrect
                  ? 'Description cannot be empty'
                  : null,
            ),
          ),
          actions: <Widget>[
            FlatButton(
              child: new Text('Ok'),
              onPressed: () {
                setState(() {_textController.text.length == 0
                    ? descriptionIncorrect= true
                    : descriptionIncorrect= false;});
                if (_textController.text.length != 0) {
                  alert.description = _textController.text;
                  Navigator.of(context).pop();
                }
              },
            ),
            FlatButton(
              child: new Text('Cancel'),
              onPressed: () {
                setState(() {
                _textController.text.length == 0
                    ? descriptionIncorrect= true
                    : descriptionIncorrect= false;});
                if (_textController.text.length == 0) {
                  _textController.text = alert.description;
                  Navigator.of(context).pop();
                }
              },
            )
          ],
        );
      });}

当我按下“确定”按钮并且textField为空时,错误应该出现,但没有出现。我已经尝试了一些方法,但是我无法按需进行。

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要执行两个步骤1-刷新警报对话框,您需要将其包装在StatefulBuilder小部件中。 2-将自动对焦添加到您的文本字段。 这是完整的代码。

bool descriptionIncorrect = false;
  var _textController = TextEditingController();
  void changeDesc() {
    showDialog(
        context: context,
        builder: (context) {
          return StatefulBuilder(
            builder: (context, setState) {
              return AlertDialog(
                title: Text('New description'),
                content: TextField(
                  autofocus: true,
                  controller: _textController,
                  decoration: InputDecoration(
                    hintText: "description",
                    errorText: descriptionIncorrect
                        ? 'Description cannot be empty'
                        : null,
                  ),
                ),
                actions: <Widget>[
                  FlatButton(
                    child: new Text('Ok'),
                    onPressed: () {
                      setState(() {
                        _textController.text.length == 0
                            ? descriptionIncorrect = true
                            : descriptionIncorrect = false;
                        print(_textController.text.length.toString());
                        print(descriptionIncorrect.toString());
                      });
                      if (_textController.text.length != 0) {
                        alert.description = _textController.text;
                        Navigator.of(context).pop();
                      }
                    },
                  ),
                  FlatButton(
                    child: new Text('Cancel'),
                    onPressed: () {
                      setState(() {
                        _textController.text.length == 0
                            ? descriptionIncorrect = true
                            : descriptionIncorrect = false;
                      });
                      if (_textController.text.length == 0) {
                         _textController.text = alert.description;
                        Navigator.of(context).pop();
                      }
                    },
                  )
                ],
              );
            },
          );
        });
  }