1

为什么我们有时使用 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();
  }
4

1 回答 1

5

notifyListeners()每当您要触发重建或有活动侦听器正在监视更改以执行某些操作时,都会使用该方法

假设一个场景,你有一个数据模型,一旦你从 API 获取数据,你想要解析它并填写模型类,你还希望 UI 在获取数据后自动重建!

为此,您可以在数据类和 UI 代码中使用,您可以用一个或一个WidgetnotifyListeners()来包装需要重建的部分,该Widget 将监视更改,一旦它们遇到任何更改,它们将重建底层 Widget (s)。ChangeNotifierProviderConsumer

在您上面共享的代码中,您使用private了无法在此文件之外访问的字段,并且您正在使用getterssetters基本上检索和修改它们

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

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

您可以在此处阅读有关此内容的更多信息

您还可以在此处阅读有关 dart 中的 getter 和 setter 的信息。

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

于 2020-12-11T14:37:38.193 回答