当我们在 ChangeNotifier 中使用 notifyListeners 时?
When we use notifyListeners in 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();
}
方法 notifyListeners()
可在您想要触发重建或有活动侦听器监视更改以执行某些操作时使用
假设一个场景,您有一个数据模型,一旦您从 API 获取数据,您想要解析它并填充模型 class,您还想要 UI获取数据后会自动重建!
为此,您可以在数据 class 和 UI 代码中使用 notifyListeners()
,您可以用 ChangeNotifierProvider
包装需要重建的部分或 Consumer
将监视更改的小部件,一旦遇到任何更改,它们将重建底层小部件。
在您上面共享的代码中,您使用了 private
无法在该文件外部访问的字段,并且您正在使用 getters
和 setters
基本上检索它们并且修改它们
现在回答你的最后一个问题,
我们使用 set
方法或 setter
基本上更新或修改一个值(通常是私有值)
只是为了向您提供一些额外的信息,
为了“安全”,您应该不 将字段包装在 getter 和 setter 中。
这个方法很旧,在 Dart 语言中不需要
您可以阅读更多相关内容here
您还可以阅读 dart 中的 getter 和 setter here。
由于您是 Whosebug 的新手,我欢迎您。
飘飘快乐!
为什么我们有时使用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 获取数据,您想要解析它并填充模型 class,您还想要 UI获取数据后会自动重建!
为此,您可以在数据 class 和 UI 代码中使用 notifyListeners()
,您可以用 ChangeNotifierProvider
包装需要重建的部分或 Consumer
将监视更改的小部件,一旦遇到任何更改,它们将重建底层小部件。
在您上面共享的代码中,您使用了 private
无法在该文件外部访问的字段,并且您正在使用 getters
和 setters
基本上检索它们并且修改它们
现在回答你的最后一个问题,
我们使用 set
方法或 setter
基本上更新或修改一个值(通常是私有值)
只是为了向您提供一些额外的信息, 为了“安全”,您应该不 将字段包装在 getter 和 setter 中。 这个方法很旧,在 Dart 语言中不需要
您可以阅读更多相关内容here
您还可以阅读 dart 中的 getter 和 setter here。
由于您是 Whosebug 的新手,我欢迎您。 飘飘快乐!