Flutter GetX Get.find() 在一个 class 中返回 null,但在另一个中找到它?
Flutter GetX Get.find() returning null in one class, but finding it in another?
我的网页有多个使用 GetX 的控制器。 authController
登录用户并调用数据库 api 从 firebase firestore 获取用户:
await Future.delayed(Duration(seconds: 1));
btnController.value.success();
UserCredential _authResult = await _auth.signInWithEmailAndPassword(email: email.trim(), password: password);
Get.find<UserController>().user = await Database().getUser(_authResult.user!.uid);
userController
是一个非常简单的控制器:
class UserController extends GetxController {
Rx<UserModel> _userModel = UserModel().obs;
UserModel get user => _userModel.value;
set user(UserModel value) => this._userModel.value = value;
void clear() {
_userModel.value = UserModel();
}
}
UserModel
本身有一个这样的构造函数,所有字段都用?
表示(null-safety)
UserModel.createUser({required final data}) {
role = data["User_Role"];
firstName = data["firstName"];
lastName = data["lastName"];
age = data["age"];
privateAdress = Adress.fromLinkedMap(data: data["privateAdress"]);
dateOfBirth = data["dateOfBirth"].toDate();
driverCardNumber = data["driverCardNumber"];
driverLicenseNumber = data["driverLicenseNumber"];
email = data["email"];
id = data["employee_ID"];
lastLoginTime = data["lastLoginTime"];
mobilePhoneNumber = data["mobilePhoneNumber"];
photo = data["photo"];
}
这是问题所在:
当我尝试在 AuthClass
中使用 Get.find().user 访问用户时,我能够得到它。但是,一旦我尝试在其他任何地方访问它,结果只会得到 null。我也在 webapp 的开始调用这些方法,所有其他控制器都工作得很好:
Get.put(AuthController());
Get.put(UserController());
Get.put(DashboardController());
这可能是什么问题?
我想通了!由于 FirebaseAuth
的绑定,我无法获取 UserController
数据。那是因为我调用了 firebaseUser.bindStream(auth.authStateChanges())
并且我的登录屏幕正在监听该值,因此在 用户被拉出之前 打开了仪表板:
UserCredential _authResult = await _auth.signInWithEmailAndPassword(
email: email.trim(),
password: password,
); // The dashboard was already opened here
Get.find<UserController>().user =
await Database().getUser(_authResult.user!.uid);
我只是在我的身份验证 Class 中添加了一个 bool final loggedIn = false.obs
并将其设置为 true 在 创建用户之后。
我的网页有多个使用 GetX 的控制器。 authController
登录用户并调用数据库 api 从 firebase firestore 获取用户:
await Future.delayed(Duration(seconds: 1));
btnController.value.success();
UserCredential _authResult = await _auth.signInWithEmailAndPassword(email: email.trim(), password: password);
Get.find<UserController>().user = await Database().getUser(_authResult.user!.uid);
userController
是一个非常简单的控制器:
class UserController extends GetxController {
Rx<UserModel> _userModel = UserModel().obs;
UserModel get user => _userModel.value;
set user(UserModel value) => this._userModel.value = value;
void clear() {
_userModel.value = UserModel();
}
}
UserModel
本身有一个这样的构造函数,所有字段都用?
表示(null-safety)
UserModel.createUser({required final data}) {
role = data["User_Role"];
firstName = data["firstName"];
lastName = data["lastName"];
age = data["age"];
privateAdress = Adress.fromLinkedMap(data: data["privateAdress"]);
dateOfBirth = data["dateOfBirth"].toDate();
driverCardNumber = data["driverCardNumber"];
driverLicenseNumber = data["driverLicenseNumber"];
email = data["email"];
id = data["employee_ID"];
lastLoginTime = data["lastLoginTime"];
mobilePhoneNumber = data["mobilePhoneNumber"];
photo = data["photo"];
}
这是问题所在:
当我尝试在 AuthClass
中使用 Get.find().user 访问用户时,我能够得到它。但是,一旦我尝试在其他任何地方访问它,结果只会得到 null。我也在 webapp 的开始调用这些方法,所有其他控制器都工作得很好:
Get.put(AuthController());
Get.put(UserController());
Get.put(DashboardController());
这可能是什么问题?
我想通了!由于 FirebaseAuth
的绑定,我无法获取 UserController
数据。那是因为我调用了 firebaseUser.bindStream(auth.authStateChanges())
并且我的登录屏幕正在监听该值,因此在 用户被拉出之前 打开了仪表板:
UserCredential _authResult = await _auth.signInWithEmailAndPassword(
email: email.trim(),
password: password,
); // The dashboard was already opened here
Get.find<UserController>().user =
await Database().getUser(_authResult.user!.uid);
我只是在我的身份验证 Class 中添加了一个 bool final loggedIn = false.obs
并将其设置为 true 在 创建用户之后。