Я пытаюсь настроить базового пользователя, зарегистрироваться, войти, редактировать профиль, просматривать страницы профиля. В настоящее время регистрация, вход в систему и редактирование профиля работают нормально, и я могу написать в firestore. Однако, у меня есть некоторые проблемы с получением данных, я смотрю на код о том, как получить данные, но он не работает для моего кода. У меня есть пользовательский класс, который получает текущую информацию о пользователях и устанавливает для нее некоторые переменные, так что я могу получить информацию из базы данных только один раз. Однако, когда я пытаюсь создать пользователя внутри класса страницы профиля и получить информацию, происходит то, что он пропускает метод get info, потому что его асинхронный, поскольку вложенный внутрь getCurrentUser является асинхронным, потому что метод auth.currentuser должен быть асинхронным.
Итак, я понимаю, в чем проблема, и я проверил ее и получил значения, которые подтверждают это в консоли, но как мне это исправить? Какие изменения я могу внести в свой код, чтобы не пропускать получение информации перед вызовом, чтобы получить информацию и вернуть ноль? Я новичок, чтобы трепетать, поэтому я извиняюсь, если это может быть очевидно, любая помощь очень ценится спасибо,
Также мой код работает для получения определенных значений из базы данных, поэтому не беспокойтесь об этом, если он не связан, так как он правильно отображается в консоли, но после того, как его пропустили с момента его асинхронности.
Это методы, о которых я упоминал, которые присутствуют ВНУТРИ класса User:
final _firestore = Firestore.instance;
final _auth= FirebaseAuth.instance;
FirebaseUser loggedInUser;
Future<void> getCurrentUser() async{
try{
final user= await _auth.currentUser();
if(user!=null){
loggedInUser=user;
email=loggedInUser.email;
}}
catch(e){
print(e);
}
}
void getInfo() async {
await getCurrentUser();
DocumentReference documentReference =
_firestore.collection("users").document("$email");
documentReference.get().then((DocumentSnapshot datasnapshot) {
if (datasnapshot.exists) {
displayName=datasnapshot.data['displayName'].toString();
bio=datasnapshot.data['bio'].toString();
print(bio);
}
else {
print("No such user");
}
});
}
Как видите, getCurrentUser должен быть асинхронным. У меня есть другие переменные, методы и конструкторы, но я попытался поделиться только тем, что нужно показать.
Тогда у меня есть этот код, который находится внутри профиля:
User currentUser;
String bio;
@override
void initState() {
// TODO: implement initState
super.initState();
currentUser= new User();
currentUser.getInfo();
bio= currentUser.getBio();
}
Затем вниз по странице профиля я создаю текстовый виджет:
Text('$bio', style: TextStyle(fontSize: 30.0, ))
Тем не менее, текст всегда показывает ноль на экране, и я понимаю, что происходит, но я не знаю, как это исправить. Я пытался что-то поменять, делая что-то не асинхронное или хотя бы пытаясь, но я не могу понять это. Пожалуйста, не удаляйте мое сообщение, я посмотрел вокруг, и этот вопрос относится к моему коду. Я действительно не знаю, как это исправить, я просто не хочу тратить впустую больше времени.