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

Почему мы иногда используем 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();
  }
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 849
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

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

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

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

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

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

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

coldasspirit 11.12.2020 18:54

Другие вопросы по теме