我想将我的朋友userid存储在我的朋友集合中。
我不知道如何在其他用户集中存储某人的详细信息。
这是我获取currentUser的代码。
Future<void> _getUserDoc() async {
final FirebaseAuth _auth = FirebaseAuth.instance;
final Firestore _firestore = Firestore.instance;
FirebaseUser user = await _auth.currentUser();
setState(() {
userRef = _firestore.collection('users').document(user.uid);
});
}
数据库结构
USERS
-user1 (current user)
-name: John
-age: 20
--FRIENDS
----user2id
----user3id
-user2
-name: Richie
-age: 20
--FRIENDS
----user3id
这个问题分为两个部分- 1)如何将user2id和user3id存储在user1 FRIENDS集合中。 2)如何检索user2数据字段并在小部件中显示。
这是我的Widget代码,我想在其中显示user2的名称。
Padding(
padding:
const EdgeInsets.only(left: 20.0, right: 20.0, top: 10.0),
child: Text(
'20',
style: TextStyle(
fontFamily: 'Montserrat',
fontWeight: FontWeight.bold,
fontSize: 17.0),
),
),
我想在Text小部件中显示,而不是 20 ,而user2已从Firestore中获取年龄。
谢谢。
答案 0 :(得分:1)
我认为存储其他用户DocumentReference的最简单方法是,如果您将其他用户DocumentReference
存储在当前用户中,则可以使用FutureBuilder
来构建它们。
红色框内:朋友是其他用户DocumentReference
的数组
例如,您有用户模型
class UserModel {
final int age;
final String name;
final List<DocumentReference> friends;
UserModel(this.age, this.name, this.friends);
// to get from Firestore
UserModel.fromSnapshot(DocumentSnapshot snapshot):
age = snapshot['age'],
name = snapshot['name'],
friends = List.from(snapshot['friends']);
}
我认为您是从Firestore获取当前用户的
UserModel currentUser;
FutureBuilder(
future: currentUser.friends.first.get(), // this will take the first friend of current user
// or you can query the list here with where
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Center(child: Text('Connection State none'));
case ConnectionState.active:
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
case ConnectionState.done:
if (snapshot.hasError)
return Center(child: Text('Error: ${snapshot.error}'));
return Padding(
padding:
const EdgeInsets.only(left: 20.0, right: 20.0, top: 10.0),
child: Text(
snapshot.data['age'],
style: TextStyle(
fontFamily: 'Montserrat',
fontWeight: FontWeight.bold,
fontSize: 17.0),
),
);
}
});
我希望这能解决您的问题。