我想使用以下类来存储帐户数据,以使其可供应用的每个部分访问。
System.in.read()
我在用户登录后使用以下代码设置了Google帐户。
class AccountData {
static AccountData _instance = new AccountData._internal();
static GoogleSignInAccount _googleData;
factory AccountData() {
return _instance;
}
AccountData._internal();
static void setData(GoogleSignInAccount googleData)
{
_googleData = googleData;
}
GoogleSignInAccount get getData{
return _googleData;
}
String getUserID(){
return "5";
}
List<Workout> getWorkouts(){
return null;
}
Workout getWorkoutByDate(String workoutID, String date)
{
return null;
}
}
此时我可以访问所有帐户字段,一切正常。通过登录屏幕的唯一方法是通过这部分代码。因此,帐户数据始终会被分配。
_googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account) {
AccountData.setData(account);
print("Logged in, id: " + account.id);
runApp(new HomeState());
});
如果我尝试访问HomeState中的帐户数据,则返回的GoogleSignInAccount为空,但不应该为空。 我希望有人知道为什么会这样,并知道如何解决问题。
答案 0 :(得分:0)
您正在使用静态方法AccountData.setData(account);
您还应该静态访问数据以恢复它们:
AccountData.getData();
以前,您需要在类体中将方法定义为static:
static GoogleSignInAccount get getData{
return _googleData;
}
然后,由于_googleData
的所有内容都是静态的,因此您无需创建AccountData实例。
否则,您可以将所有这些更改为实例变量和方法,并且应该预先创建实例。
答案 1 :(得分:0)
我的其中一页有同样的问题。您应该有一种方法来检查异步 _googleSignIn 帐户数据是否如@chemamolins 所说的那样收到。据我所知,initState 函数不会等到接收到数据,它会继续使用空值呈现您的页面。