Flutter Dart Singleton Data'Lost'

时间:2018-06-17 07:59:15

标签: dart singleton flutter

我想使用以下类来存储帐户数据,以使其可供应用的每个部分访问。

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为空,但不应该为空。 我希望有人知道为什么会这样,并知道如何解决问题。

2 个答案:

答案 0 :(得分:0)

您正在使用静态方法AccountData.setData(account);

将数据存储在类的静态变量中

您还应该静态访问数据以恢复它们:

AccountData.getData();

以前,您需要在类体中将方法定义为static:

static GoogleSignInAccount get getData{
    return _googleData;
}

然后,由于_googleData的所有内容都是静态的,因此您无需创建AccountData实例。

否则,您可以将所有这些更改为实例变量和方法,并且应该预先创建实例。

答案 1 :(得分:0)

我的其中一页有同样的问题。您应该有一种方法来检查异步 _googleSignIn 帐户数据是否如@chemamolins 所说的那样收到。据我所知,initState 函数不会等到接收到数据,它会继续使用空值呈现您的页面。