Почему мы иногда используем 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();
}
Метод notifyListeners()
используется всякий раз, когда вы хотите инициировать перестроение или когда есть активный прослушиватель, который отслеживает изменение для выполнения определенных действий.
Предположим сценарий: у вас есть модель данных, и как только вы получаете данные из API, вы хотите проанализировать их и заполнить класс модели. Также вы хотите, чтобы пользовательский интерфейс автоматически перестраивался после получения данных!
Для этой цели вы можете использовать notifyListeners()
в классе данных и в коде вашего пользовательского интерфейса. Вы можете обернуть части, которые необходимо перестроить, с помощью ChangeNotifierProvider
или Consumer
виджета, который будет отслеживать изменения, и как только они обнаружат какие-либо изменения, они будут перестроены. базовый виджет(ы).
В коде, которым вы поделились выше, вы использовали поля private
, к которым нельзя получить доступ за пределами этого файла, и вы используете getters
и setters
, чтобы получить их и изменить.
Отвечая на ваш последний вопрос сейчас,
Мы используем метод set
или setter
, чтобы в основном обновить или изменить значение (обычно частное значение).
Просто чтобы предоставить вам дополнительную информацию, Вы НЕ должны оборачивать поля в геттеры и сеттеры, чтобы быть «безопасными». Этот метод устарел и не нужен в языке Dart.
Подробнее об этом можно прочитать здесь
Вы также можете прочитать о геттерах и сеттерах в dart здесь.
Поскольку вы новичок в StackOverflow, я приветствую вас. Счастливого порхания!
я разбираюсь сейчас. Итак, если я хочу обновить пользовательский интерфейс, я должен использовать notifylisteners, я полагаю, верно?