Когда мы используем notifyListeners в ChangeNotifier?

#flutter #dart #state-management #flutter-change-notifier

#flutter #dart #управление состоянием #flutter-change-notifier

Вопрос:

Почему мы иногда используем notifyListeners, а также почему мы не используем notifyListeners? Как мы можем использовать функцию в changenotifier?

Например, в этом коде иногда мы использовали notifyListeners , но иногда мы не использовали notifyListeners (в функции login()).). Почему ? Когда мы используем notifyListeners?

 String get userEmail => _userEmail;

  set userEmail(String value) {
    _userEmail = value;
    notifyListeners();
  }

  String get userPassword => _userPassword;

  set userPassword(String value) {
    _userPassword = value;
    notifyListeners();
  }

  String get userName => _userName;

  set userName(String value) {
    _userName = value;
    notifyListeners();
  }

  DateTime get dateOfBirth => _dateOfBirth;

  set dateOfBirth(DateTime value) {
    _dateOfBirth = value;
    notifyListeners();
  }

  Future<bool> login() async {
    try {
      isLoading = true;

      print(userEmail);
      print(userPassword);

      if (isLogin) {
        await FirebaseAuth.instance.signInWithEmailAndPassword(
          email: userEmail,
          password: userPassword,
        );
      } else {
        await FirebaseAuth.instance.createUserWithEmailAndPassword(
          email: userEmail,
          password: userPassword,
        );
      }

      isLoading = false;
      return true;
    } catch (err) {
      print(err);
      isLoading = false;
      return false;
    }
  }
}
 

Кроме того, может кто-нибудь ответить мне о том, почему мы используем метод set в этом коде

   bool get isLogin => _isLogin;

  set isLogin(bool value) {
    _isLogin = value;
    notifyListeners();
  }
 

Ответ №1:

Этот метод notifyListeners() используется всякий раз, когда вы хотите запустить перестройку или всякий раз, когда есть активный прослушиватель, который отслеживает изменения для выполнения определенных действий

Предположим, у вас есть сценарий, у вас есть модель данных, и как только вы извлекаете данные из API, вы хотите проанализировать их и заполнить класс модели, также вы хотите, чтобы пользовательский интерфейс автоматически перестраивался после получения данных!

Для этой цели вы можете использовать notifyListeners() в классе данных и в своем коде пользовательского интерфейса, вы можете обернуть части, которые необходимо перестроить, с ChangeNotifierProvider помощью виджета или Consumer виджета, который будет отслеживать изменения, и как только они обнаружат какие-либо изменения, они перестроят базовый виджет (ы).

В коде, которым вы поделились выше, вы использовали private поля, к которым нельзя получить доступ за пределами этого файла, и вы используете getters and setters для их извлечения и изменения

Отвечая на ваш последний вопрос, мы используем set метод or setter для основного обновления или изменения значения (обычно частного значения)

Просто чтобы предоставить вам дополнительную информацию, вы НЕ должны переносить поля в геттеры и сеттеры, чтобы быть «безопасными». Этот метод устарел и не нужен на языке Dart

Подробнее об этом можно прочитать здесь

Вы также можете прочитать о геттерах и сеттерах в dart здесь.

Поскольку вы новичок в StackOverflow, я приветствую вас. Счастливого Порхания !

Комментарии:

1. теперь я понимаю. Итак, если я хочу обновить пользовательский интерфейс, я должен использовать notifylisteners, я полагаю, правильно?