当我们在 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 无法在该文件外部访问的字段,并且您正在使用 getterssetters 基本上检索它们并且修改它们

现在回答你的最后一个问题, 我们使用 set 方法或 setter 基本上更新或修改一个值(通常是私有值)

只是为了向您提供一些额外的信息, 为了“安全”,您应该 将字段包装在 getter 和 setter 中。 这个方法很旧,在 Dart 语言中不需要

您可以阅读更多相关内容here

您还可以阅读 dart 中的 getter 和 setter here

由于您是 Whosebug 的新手,我欢迎您。 飘飘快乐!