Как завершить выполнение валидатора? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть код валидатора. Проблема в том, что он не выполняет if (_value == true) утверждение, что с ним не так? Это дает мне ---------------- true, но не выводит '/////////// +++++++++++++++++++' или '////// /////-------------------'.

validator: (val) {
  print('login page password: $val');
  if (val.isEmpty) return 'Wrong password';

  bool _value;

  locator<LocalStorageService>()
      .isValidPassword(val.trim())
      .then((onValue) {
    print('---------------- $onValue');

    _value = onValue;
  });

  if (_value == true) {
    print('///////////+++++++++++++++++++');
    return null;
  } else {
    print('///////////-------------------');
    return 'Wrong password';
  }
},

1 Ответ

1 голос
/ 29 апреля 2020

У вас есть асинхронный код, выполняющийся внутри вашего валидатора, поэтому, когда выполнение достигает этой строки:

 locator<LocalStorageService>()
      .isValidPassword(val.trim())
      .then((onValue) {
    print('---------------- $onValue');

    _value = onValue;
  });

Он вызывает isValidPassword и регистрирует обратный вызов (then(...))

И он продолжает следующий код:

if (_value == true) {
    print('///////////+++++++++++++++++++');
    return null;
  } else {
    print('///////////-------------------');
    return 'Wrong password';
  }

немедленно, не дожидаясь завершения Future, указанного выше,

Так что теперь _value по-прежнему null, потому что Future не У него нет времени на возврат, поэтому теперь будет выполнен блок else,

Решение : Полагаю, это TextFormFieldValidator, и поэтому вы не можете await Future (иначе вы будете возвращать Future из проверки, которая запрещена), поэтому вы должны изменить свой код, который делает проверку, чтобы она не зависела от Future

узнать больше о как работает асин c код здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...