当我们在ChangeNotifier中使用notifyListeners时?
为什么我们有时使用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 中获取数据,你想解析它并填写模型类,并且你希望在获取数据后 UI 会自动重建!
为此,您可以notifyListeners()在数据类和 UI 代码中使用,您可以使用将监视更改ChangeNotifierProvider的ConsumerWidget或Widget包装需要重建的部分,一旦遇到任何更改,它们将重建底层 Widget (s)。
在您上面共享的代码中,您使用private了无法在此文件之外访问的字段,并且您正在使用getters并setters基本上检索它们并修改它们
现在回答你的最后一个问题,我们使用set方法或setter基本上更新或修改一个值(通常是一个私有值)
只是为你提供一些额外的信息,您应不包装在getter和setter领域只是为了“安全”。这种方法是旧的,在 Dart 语言中不需要
您可以在此处阅读有关此内容的更多信息
您还可以在此处阅读有关 dart 中的 getter 和 setter 的信息。
由于您是 StackOverflow 的新手,我欢迎您。飘飘快乐!
THE END
二维码