#firebase #flutter #dart #google-cloud-firestore
# #firebase #флаттер #dart #google-cloud-firestore
Вопрос:
В моем коде я пытаюсь присвоить строковое значение пустой строке и отобразить на странице, но оно продолжает показывать значение null, но когда я его распечатываю, оно показывает значение.
String fName = '';
@override
void initState() {
super.initState();
getData();
}
getData() async {
FirebaseAuth _auth = FirebaseAuth.instance;
User _firebaseUser = _auth.currentUser;
print("============ MyHome ================");
print(_firebaseUser.uid);
_currentUser = await Database().getUserData(_firebaseUser.uid);
if (_currentUser != null) {
fName = _currentUser.firstName;
print(_currentUser.firstName);
}
}
База данных
Future<UserData> getUserData(String uid) async {
UserData returnValue = UserData();
try {
DocumentSnapshot _docSnapshot =
await _firestore.collection("users").doc(uid).get();
returnValue.uid = uid;
returnValue.firstName = _docSnapshot.data()["firstName"];
returnValue.lastName = _docSnapshot.data()["lastName"];
returnValue.userMail = _docSnapshot.data()["userMail"];
returnValue.userType = _docSnapshot.data()["userType"];
print("====================== on getData =============");
print(returnValue.firstName);
} catch (e) {
print(e);
}
return returnValue;
}
И всякий раз, когда я пытаюсь отобразить данные, которые он мне дает null
Text("Hello, $fName"),
Пожалуйста, как мне это сделать или я что-то упустил
Ответ №1:
используется setState
для перестроения дерева виджетов со значением:
setState(() {
fName = _currentUser.firstName;
});
Ответ №2:
Поскольку функция getData является асинхронной, flutter уже построил дерево виджетов до завершения getData. Теперь вам нужно будет обновить состояние с помощью setstate .
setState(() {
fName = _currentUser.firstName;
});
Ответ №3:
Вам необходимо установить новое состояние, поскольку мы внесли изменения в предыдущее состояние (поскольку ваша функция getData является асинхронной.
setState(() {
fName = _currentUser.firstName;
});