Firestore 查询变量以填充共享首选项

Posted

技术标签:

【中文标题】Firestore 查询变量以填充共享首选项【英文标题】:Firestore query to variable to populate shared preferences 【发布时间】:2020-03-24 01:40:02 【问题描述】:

Flutter 新手,虽然我从事代码工作多年,但这是我第一次实际开发。我一直在尝试弄清楚如何查询 Cloud Firestore 并将其中一个属性映射到共享首选项。因为当用户登录时我的应用程序正在与云 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);

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

再次感谢!

【问题讨论】:

【参考方案1】:

我最终创建了一个新类,其中包含检索我想要的字段的函数。然后我为该函数的结果分配了一个变量。

来电:

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;
        

【讨论】:

以上是关于Firestore 查询变量以填充共享首选项的主要内容,如果未能解决你的问题,请参考以下文章

共享首选项不适用于 ListView 中的联系人

在共享首选项中获取文件大小

访问共享首选项以进行多部分上传时,Android 上的 Java 错误

共享首选项 - 单个值的最大长度

我的共享首选项存储列表视图的数据并检索它不起作用

应用程序崩溃时,共享首选项会重置数据。请指导