я использую userID для создания базы данных, как показано ниже
![enter image description here](https://i.stack.imgur.com/d7zkC.png)
Я могу получить идентификатор пользователя, когда пользователь вошел в систему, но если я использую идентификатор пользователя для получения данных из базы данных Firebase, он всегда получит следующую ошибку.
Пожалуйста, помогите решить эту проблему.
> NoSuchMethodError: The method '[]' was called on null. Receiver: null
> Tried calling: []("Email")
Вот с моим кодом:
@override
void initState() {
super.initState();
_loadCurrentUser();
shop = Shop();
databaseReference = database.reference().child("香港");
}
void _loadCurrentUser() {
FirebaseAuth.instance.currentUser().then((FirebaseUser user) {
setState(() {
// call setState to rebuild the view
this.currentUser = user;
});
});
}
String _email() {
if (currentUser != null) {
return currentUser.email;
} else {
return "no current user";
}
}
String _userID() {
if (currentUser != null) {
debugPrint(currentUser.uid);
databaseReference.child(currentUser.uid).once().then(_updateToDo);
return currentUser.uid;
} else {
return "no current user";
}
}
@override
Widget build(BuildContext context) {
void _signOut() async {
try {
await widget.auth.signOut();
widget.onSignOut();
} catch (e) {
print(e);
}
}
return new Scaffold(
backgroundColor: Colors.blueGrey,
appBar: new AppBar(
backgroundColor: Colors.black,
title: Text(_email()),
),
body:
createFireList(),
);
}
Widget createFireList() {
return Column(
children: <Widget>[
Text(_userID()),
Text(test)
],
);
}
_updateToDo(DataSnapshot map) {
if (map.value != null) {
var x = map.value["Email"];
setState(() {
test = x;
});
}
else {
debugPrint("Error");
}
}
}