Итак, у меня есть файл dart для экрана входа в систему, а затем другой домашний файл. Я пытаюсь получить доступ к идентификатору пользователя в домашнем файле, чтобы получить уникальный документ пользователя Cloud Firestore. Однако всякий раз, когда я вызываю getUser (), он говорит, что Future не является подтипом типа 'String'. Означает ли это, что по какой-то причине Future не разворачивается, чтобы вернуть строку uid?
getUser() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
return user.uid;
}
Здесь я вызываю get user в файле дротика, отличном от аутентификации, но в том же файле, что и моя функция getUser ().
return StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance.collection('watchlists').document(getUser()).snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot){
if (snapshot.hasError) {
return new Center(
child: Text('Error: ${snapshot.error}'),
);
}
if (!snapshot.hasData) {
return new Center(
child: CircularProgressIndicator(),
);
}
else {
var documents = snapshot.data.data;
var vals = documents.values;
List<WatchListItem> watchListItems = [];
for (int x = 0; x < vals.length; x++) {
watchListItems.add(
WatchListItem(
symbol: vals.elementAt(x).toString(),
price: 190.79,
),
);
}
return new Center(
child: ListView(
children: watchListItems,
),
);
}
},
);
Когда я пытаюсь получить getUser ( ) .toString () ошибка, которую я получаю, состоит в том, что 'значения' получателя были вызваны на нуль (я пытаюсь получить значения базы данных) Доступ к текущему пользователю возможен только во время аутентификации? Или к нему можно получить доступ в любом месте приложения в любое время, пока пользователь вошел в систему? Обходной путь, который я вижу, состоит в том, чтобы получить идентификатор пользователя при входе в систему, а затем передать его в качестве параметра каждому новому виджету, которому я go. У меня действительно тяжелые времена с этим, потому что у Google едва ли есть какая-либо документация по использованию их собственного Flutter с их Firebase.