#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, я полагаю, правильно?