Firestore 查询变量以填充共享首选项
Firestore query to variable to populate shared preferences
Flutter 新手,尽管我从事代码工作多年,但这是我第一次真正进行开发。我一直在尝试弄清楚如何查询 Cloud Firestore 并将其中一个属性映射到共享首选项。由于我的应用程序在用户登录时正在与云 firestore 通信,我觉得我可以用几个字段更新我的共享首选项,这样我就不必在每次想要检索那条信息时都调用 firestore。
我创建了一个 class 代表 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);
这可能吗?我想我缺少将流捕获为快照?但不确定。
再次感谢!
我最终创建了一个新的 class,它具有检索我想要的字段的功能。然后我为该函数的结果分配了一个变量。
调用如下:
aboutMe = await FirestoreUserService(id: widget.id).getAboutMeFromFirestore();
这是 class 和函数:
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;
}
}
Flutter 新手,尽管我从事代码工作多年,但这是我第一次真正进行开发。我一直在尝试弄清楚如何查询 Cloud Firestore 并将其中一个属性映射到共享首选项。由于我的应用程序在用户登录时正在与云 firestore 通信,我觉得我可以用几个字段更新我的共享首选项,这样我就不必在每次想要检索那条信息时都调用 firestore。
我创建了一个 class 代表 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);
这可能吗?我想我缺少将流捕获为快照?但不确定。
再次感谢!
我最终创建了一个新的 class,它具有检索我想要的字段的功能。然后我为该函数的结果分配了一个变量。
调用如下:
aboutMe = await FirestoreUserService(id: widget.id).getAboutMeFromFirestore();
这是 class 和函数:
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;
}
}