在Flutter中获取Firebase用户ID时,共享首选项在启动时返回null

时间:2019-12-16 18:32:00

标签: asynchronous flutter sharedpreferences flutter-dependencies

我正在获取用户登录时的用户ID,并将其存储在登录页面的“共享首选项”中,就像这样

async function findAdditionals(context) {
  const { result, app } = context;
  let newResultData = result.data.map(async pr => {
    let includedRecords = await app.service('propertyadds').find({
      query: {
        property_id: pr.id
      }
    })
    pr.additionals = includedRecords.map(e => e.additional_id);
    return pr;
  })
  Promise.all(newResultData).then(completed => {
    return Object.assign({},context,{result: {
      total: result.total,
      limit: result.limit,
      skip: result.skip,
      data: completed
    }})
  });
}

}

然后我将用户转到我的主屏幕,如果用户不为null,则在用户进入主页后,共享首选项接收的用户ID为null, 我正在从initState()

获取用户的ID。
Promise.all

问题1 关闭应用程序并重新启动后,将检索到我的用户ID,并且可以显示用户名,但是,当用户首次登录应用程序时,我无法达到此目的。

问题2 如果我注销用户,然后将用户重新登录,则存储在共享首选项中的ID仍然是先前的值,该值在登录时会调用旧用户的ID,然后在重新启动应用程序时获取新用户的ID。

我尝试查看其他Stack Overflow页面,但对于Flutter还是很困惑和陌生!

1 个答案:

答案 0 :(得分:0)

为什么在使用Firebase时使用SharedPreferences 当您在应用启动时可以从 FirebaseAuth 对象直接访问登录的用户详细信息时。

    FirebaseUser loggedUser;
    checkLoggedIn() {
        FirebaseAuth.instance.currentUser().then((FirebaseUser user) {
          if (user != null ) {
             loggedUser = user;
             setState(() {});
             // all these values may or may not be null that depends if the user's 
             // login provider has got these details from user or not
             //user.providerId;// access the logged in userId
             //user.displayName;// access logged in user Name
             //user.email;// access logged in user email
             //user.phoneNumber;// access logged in user contact number 
          }
        });
      }

调用 checkLoggedIn()方法有状态小部件的initState()函数内部

@override
  void initState() {
    super.initState();
    checkLoggedIn();
  }