我正在获取用户登录时的用户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还是很困惑和陌生!
答案 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();
}