Отображение текста ошибки TextField не работает - PullRequest
0 голосов
/ 30 мая 2020

Я создаю модуль changePassword в приложении, и я хочу проверить, что поле не пустое, но не работает, и я не знаю, почему

Card(
  color: Color(0xFFDBE2EF),
  margin: EdgeInsets.symmetric(
      vertical: 10, horizontal: 25),
  child: TextField(
    controller: passwordConfirmController,
    obscureText: true,
    decoration: InputDecoration(
        border: OutlineInputBorder(),
        labelText: 'Confirmar contraseña',
        labelStyle:
            TextStyle(fontFamily: 'Montserrat')),
  ),
),
SizedBox(
  height: 20,
),
RaisedButton(
    color: Color(0xFFDBE2EF),
    onPressed: () => {
          setState(() {
            print("Valor _validate antes");
            print(_validate);
            print("Valor isEmpty");
            print(passwordController.text.isEmpty);
            passwordController.text.isEmpty
                ? _validate = true
                : _validate = false;
            _isLoading = true;
            print("Valor _validate después");
            print(_validate);
          }),
          changePass(passwordController.text),
        },
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(5),
    ),
    child: Text(
      'Actualizar',
      style: TextStyle(
          fontSize: 20,
          fontFamily: 'Montserrat',
          color: Color(0xFF002D53),
          fontWeight: FontWeight.bold),
    )),

Значения на поднятой кнопке, где я проверьте, пуст ли пароль, похоже, работает печать ожидаемых значений, но текст ошибки не работает

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Вы должны изменить свойство _validate внутри setState (), и на основе этого изменения TextField текст ошибки

class FirstScreen extends StatefulWidget {
  @override
  _FirstScreenState createState() => _FirstScreenState();
}

class _FirstScreenState extends State<FirstScreen> {
  final passwordConfirmController = TextEditingController();
  bool _validate = false;

  void _validatePassword() {
    if (passwordConfirmController.text.isEmpty) {
      _validate = true;
    } else {
      _validate = false;
    }
    setState(() {
      _validate;
      print("Valor _validate después");
      print(_validate);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        children: <Widget>[
          Card(
            color: Color(0xFFDBE2EF),
            margin: EdgeInsets.symmetric(vertical: 10, horizontal: 25),
            child: TextField(
              controller: passwordConfirmController,
              obscureText: true,
              decoration: InputDecoration(
                  errorText: _validate ? "Enter Password" : null,
                  border: OutlineInputBorder(),
                  labelText: 'Confirmar contraseña',
                  labelStyle: TextStyle(fontFamily: 'Montserrat')),
            ),
          ),
          SizedBox(
            height: 20,
          ),
          RaisedButton(
              color: Color(0xFFDBE2EF),
              onPressed: () => {_validatePassword()},
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(5),
              ),
              child: Text(
                'Actualizar',
                style: TextStyle(
                    fontSize: 20,
                    fontFamily: 'Montserrat',
                    color: Color(0xFF002D53),
                    fontWeight: FontWeight.bold),
              )),
        ],
      ),
    );
  }
}
0 голосов
/ 30 мая 2020

Вам необходимо передать текст ошибки на TextField

TextField(
  decoration: InputDecoration(
    errorText:"some error",    
  ),
...