【发布时间】:2021-04-30 12:39:31
【问题描述】:
我正在尝试使用 Riverpod stateNotifier 在用户身份验证期间跟踪枚举的更改以确定要显示的适当屏幕。例如注册、登录、主页或身份验证屏幕,但我在命名构造函数中返回此错误:
超类“StateNotifier”没有零参数构造函数。 尝试在“StateNotifier”中声明一个零参数构造函数,或在“StateNotifier”中显式调用不同的构造函数。 我知道这里有一些我不明白的地方,但我想不通。
这是我的代码:
enum Status {
unInitialized,
unauthenticated,
authenticating,
authenticated,
processing
}
class AuthWithEmailPassword extends StateNotifier<Status> {
AuthWithEmailPassword() : super(Status.authenticated);
Status _status = Status.authenticated;
// AuthWithEmailPassword();
UserServices _userServices = UserServices();
FirebaseAuth _auth;
UserModel _userModel;
User _user;
Status get status => _status;
User get user => _user;
UserModel get userModel => _userModel;
//Name consturctor of this class
@override
AuthWithEmailPassword.initialize()
: _auth = FirebaseAuth.instance{
_status = Status.unInitialized;
_auth.authStateChanges().listen((User value) async {
_status = Status.unInitialized;
if (value == null) {
_status = Status.unauthenticated;
print('user is signed out');
} else {
_userModel = await _userServices.getUserByUid(id: value.uid);
_status = Status.authenticated;
_user = value;
print('user signed in');
}
});
}}
【问题讨论】:
-
您可以创建一个初始化函数并在您的 StateNotifierProvider 中调用它,而不是使用命名构造函数。如果你愿意,我可以提供一个例子。
-
是的,请。如果您能提供@Alex Hartford 的示例,我将不胜感激。