如何在不传递所需值的情况下调用接受参数的方法?

时间:2021-04-02 10:53:10

标签: flutter dart firebase-authentication

我在 GitHub 上找到了以下代码片段:

import 'package:flutter/widgets.dart';
import 'package:firebase_auth/firebase_auth.dart';

enum Status { Uninitialized, Authenticated, Authenticating, Unauthenticated }

class UserRepository with ChangeNotifier {
  final FirebaseAuth auth;
  FirebaseUser _user;
  Status _status = Status.Uninitialized;

  UserRepository.instance({this.auth}) {
    auth.onAuthStateChanged.listen(onAuthStateChanged);
  }

  Status get status => _status;
  FirebaseUser get user => _user;

  Future<bool> signIn(String email, String password) async {
    try {
      _status = Status.Authenticating;
      notifyListeners();
      await auth.signInWithEmailAndPassword(email: email, password: password);
      return true;
    } catch (e) {
      _status = Status.Unauthenticated;
      notifyListeners();
      return false;
    }
  }

  Future signOut() async {
    auth.signOut();
    _status = Status.Unauthenticated;
    notifyListeners();
    return Future.delayed(Duration.zero);
  }

  Future<void> onAuthStateChanged(FirebaseUser firebaseUser) async {
    if (firebaseUser == null) {
      _status = Status.Unauthenticated;
    } else {
      _user = firebaseUser;
      _status = Status.Authenticated;
    }
    notifyListeners();
  }
}

在实例化 UserRepository 的顶部,

UserRepository.instance({this.auth}) {
    auth.onAuthStateChanged.listen(onAuthStateChanged);
  }

auth.onAuthStateChanged.listen 上,他传递了 onAuthStatechanged 方法。正如您在下面的代码片段中看到的那样,此方法接受参数 FirebaseUser firebaseUser,但在调用时永远不会传递。 我的问题是,如果它在调用时没有收到任何价值,那么它如何工作?

完全披露:此代码不是我的,它曾/可在 GitHub 上获得。我只是把它贴在这里,让回答我问题的人能完全理解。

1 个答案:

答案 0 :(得分:0)

"auth.onAuthStateChanged.listen" 本身就是一个函数,它需要

Future Function(FirebaseUser) 作为参数。函数吃函数就是这样。

OG 作者可以像这样传递一个未命名的函数

auth.onAuthStateChanged.listen((FirebaseUser firebaseUser){});

但这会降低可读性