将查询火存储到变量以填充共享首选项



Flutter的新手,尽管我已经在代码方面工作了很多年,但这是我第一次真正开发。我一直在试图弄清楚如何查询Cloud Firestore,并将其中一个属性映射到共享首选项。由于当用户登录时,我的应用程序正在与云firestore对话,我觉得我可以用几个字段更新我的共享偏好,这样我就不用每次想检索信息时都打电话给firestore了。

我创建了一个类,表示消防仓库中的集合布局

class FirestoreUser {
FirestoreUser(this.aboutMe, this.nickname);
final String aboutMe;
final String nickname;

factory FirestoreUser.fromMap(Map<String, dynamic> data) {
if (data == null) {
return null;
}
final String aboutMe = data['aboutMe'];
final String nickname = data['nickname'] ?? '';
return FirestoreUser(aboutMe, nickname);
}
Map<String, dynamic> toMap() {
return {
'aboutMe': aboutMe,
'nickname': nickname,
};
}
}

我还有一个向Firestore集合写入数据的函数。这很好用。

我遇到的困难是如何在上面的集合中查询"aboutMe"?我正在使用一个获取uid的提供者,但我该如何做这样的事情:

aboutMe = Firestore.query.tothatdocument

到目前为止,我一直在做以下工作:

final user = Provider.of<User>(context, listen: false);
final firestore = Provider.of<FirestoreService>(context, listen:false);
final firebaseUser = await FirebaseAuth.instance.currentUser();
final QuerySnapshot result = await Firestore.instance.collection('users').where('id', isEqualTo: firebaseUser.uid).getDocuments();
final List<DocumentSnapshot> documents = result.documents;
SharedPreferences prefs = await SharedPreferences.getInstance();

我想做这样的事情:

prefs.setString('aboutMe', 'thatAboutMeVariable);

这可能吗?我想我错过了将流捕获为快照?但不能确定。

再次感谢!

我最终创建了一个新的类,其中包含检索所需字段的函数。然后,我为该函数的结果指定了一个变量。

电话是这样的:

aboutMe = await FirestoreUserService(id:  widget.id).getAboutMeFromFirestore();

这是类和函数:

class FirestoreUserService {

FirestoreUserService({@required this.id});
final FirebaseFirestore firestore = FirebaseFirestore.instance;
CollectionReference users;
String aboutMe;

Future getAboutMeFromFirestore() async {
DocumentSnapshot ds = await FirebaseFirestore.instance.collection('users').doc(id).get();
aboutMe = ds.data()['aboutMe'];
//print('nFirestore aboutMe is value: $aboutMe');
return aboutMe;
}
}

最新更新