我在 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 上获得。我只是把它贴在这里,让回答我问题的人能完全理解。
答案 0 :(得分:0)
"auth.onAuthStateChanged.listen" 本身就是一个函数,它需要
Future
OG 作者可以像这样传递一个未命名的函数
auth.onAuthStateChanged.listen((FirebaseUser firebaseUser){});
但这会降低可读性