首先,我不确定我是否已正确回答该问题的标题,因此,如果您比我知道的更好,请随时纠正我。
我想做什么:
我正在尝试使用提供程序状态管理来实现基于Firebase的身份验证系统。但是我遇到这个问题...
因此,我想要一个名为BaseAuth的抽象类,在其中我将拥有所需的所有函数定义,而不会干扰任何Firebase。因为我想让它们保持尽可能的分离,所以这是一个棘手的部分。
BaseAuth:
abstract class BaseAuth {
Future<String> login(String email, String password);
Future<String> register(String email, String password);
Future<void> onAuthStateChanged(void Function(FirebaseUser) callback);
Future<void> logout();
Future<UserData> getCurrentUser();
}
DatabaseFirebase:
class DatabaseFirebase implements BaseAuth {
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
FirebaseUser _firebaseUser;
//Some implementations bla bla bla
@override
Future<void> onAuthStateChanged(void Function(FirebaseUser) callback) async {
_firebaseAuth.onAuthStateChanged.listen(callback);
}
}
用户存储库:
class UserRepository with ChangeNotifier {
Status _status = Status.Uninitialized;
BaseAuth auth;
UserData _user;
UserRepository({@required this.auth}) {
auth.onAuthStateChanged(_onAuthStateChanged);
}
//Some implementation bla bla bla
Future<void> _onAuthStateChanged(FirebaseUser user) async {
if (user == null || user.uid == null) {
_status = Status.Unauthenticated;
} else {
auth.getCurrentUser().then((user) => _user = user);
_status = Status.Authenticated;
}
notifyListeners();
}
}
因此,如何查看才能使我的登录系统正常工作,我不得不在该函数中使用FirebaseUser。您是否知道如何分隔此功能?我想在我的BaseAuth中有一个名为onAuthStateChanged
的函数,不带任何参数,或者有一个名为UserData
的函数,这是我的用户模型。
换句话说,我有什么办法可以使我的 BaseAuth 类独立于firebase?重构后我的函数应该如何工作?