Первая проблема заключается в том, что вы не можете назначить имя пользователя, подобное этому
currentUser.userName = user.data['userName'];
, потому что currentUser имеет значение null. Простое решение - заменить
User currentUser;
на User currentUser = User();
Вторая проблема:
Я думаю, вы никогда не должны искать пользователя по его электронной почте, а скорее по UID, который вы получить от
FirebaseUser user = await FirebaseAuth.instance.currentUser()
,
Итак, вы должны запросить пользователя следующим образом:
static Future<User> userDataStream() async {
final firestore = Firestore.instance;
final currentFirestoreUser = await FirebaseAuth.instance.currentUser();
User currentUser;
var query = await firestore
.collection('users')
.where('uid', isEqualTo: currentFirestoreUser.uid)
.getDocuments();
var user = query.documents.first.data;
currentUser = User(
userName: user['userName'],
userID: user['userID'],
level: user['level'],
email: user['email']);
return currentUser;
}
Вы можете добавить UID в качестве параметра метода или оставить его внутри метод.