При попытке получить данные аутентифицированного пользователя из существующего пользовательского документа Firestore, я получаю следующую ошибку:
Получатель 'uid' был вызван нулем
мой код выглядит следующим образом:
class SideDrawer extends StatelessWidget {
const SideDrawer({Key key, this.user}) : super(key: key);
final FirebaseUser user;
@override
Widget build(BuildContext context) {
return ......
......
userPanel(context),
......
}
Widget userPanel(BuildContext context) {
return new Padding(
padding: const EdgeInsets.only(top: 10.0),
child: new DrawerHeader(
child: StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance
.collection('users')
.document(user.uid)
.snapshots(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else if (snapshot.hasData) {
return userName(snapshot.data);
}
return LinearProgressIndicator();
},
),
),
);
}
}
Text userName(DocumentSnapshot snapshot) {
if (snapshot.data == null) {
return Text('no data set in the user document in firestore');
} else {
return snapshot.data['name'];
}
}
отправка пользователя со страницы входа в систему:
void signIn() async {
if(_formKey.currentState.validate()){
_formKey.currentState.save();
try{
FirebaseUser user = await FirebaseAuth.instance.signInWithEmailAndPassword(email: _email, password: _password);
Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage(user: user)));
}catch(e){
print(e.message);
}
}
}
}
и вот моя домашняя страница:
class HomePage extends StatelessWidget {
const HomePage({Key key, this.user}) : super(key: key);
final FirebaseUser user;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
drawer: SideDrawer(),
);
}
}
Предполагая, что это проблема асинхронного программирования, я провел поиск по ней и нашел несколько решений, использующих объект "Future", но не мог понять, как правильно его реализовать, какую-либо помощь, пожалуйста?