Я пытаюсь получить некоторые данные из моей Firebase, используя Firestore.instance.collection (currentUser), но currentUser - это Future.How я могу это сделать?
У меня есть следующее
class FoodCart extends StatefulWidget {
@override
_FoodCartState createState() => _FoodCartState();
}
class _FoodCartState extends State<FoodCart> {
@override
Widget build(BuildContext context) {
String currentUser;
firebaseHelper().getCurrentUser().then((result){
currentUser = result;
});
return Scaffold(
appBar: AppBar(
title: Text("FoodCart"),
backgroundColor: Colors.lightBlue,
),
body: StreamBuilder<QuerySnapshot>(//recover data from firebase and shows in the listview
stream: Firestore.instance.collection(currentUser).snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError)
return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting: return new Text('Loading...');
default:
return new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return foodCard(document['name'],document['description']);
}).toList(),
);
}
},
),
);
}
}
В моем firebaseHelper () у меня есть:
...
Future<String> getCurrentUser() async{
FirebaseUser user = await FirebaseAuth.instance.currentUser();
if(user != null){//if exists a current user, then
return user.uid;
}else{
return null;
}
}
...
Но в потоке : Firestore.instance.collection (currentUser) .snapshots () ,
currentUser всегда возвращает нуль, потому что currentUser = result присваивается внутри функции Future (затем). Другими словами, мне нужно использовать результат функции Future внутри поля, которое нуждается в функции String. Как я могу это сделать?