如何在 Flutter 中创建和读取一组键值对(映射)以在 Firestore 中存储数据

Posted

技术标签:

【中文标题】如何在 Flutter 中创建和读取一组键值对(映射)以在 Firestore 中存储数据【英文标题】:How to create and read an array of key value pairs (map) in Flutter for storing data in Firestore 【发布时间】:2021-11-25 06:37:09 【问题描述】:

我有问题集合和一些“X”个字段,但现在我想在我的firestore集合问题的现有文档中设置一个键值对数组,用于将数据存储在我的firestore中显示所需的结构在图片下方,我无法获得如何创建这样的结构我想获取它们并使用颤振和飞镖在 Firestore 中创建数据,

到目前为止,我可以设置这样的字符串字段,但不能设置它们的数组,

 Future<void> setAnswer() async 
      String ans = ans_Controller.text;
      FirebaseFirestore db = FirebaseFirestore.instance;

      await db.runTransaction((transaction) async 
        DocumentReference qRef =
            db.collection('question').doc(widget.question.id);
        await transaction.set(
            qRef,
            
              'content': ans,
              'timestamp': DateTime.now().toString(),
              'username': _currentUser.displayName,
            ,
            SetOptions(merge: true));
      );
    

并且每个数组元素必须具有相同的键但不同的值,例如哈希映射

感谢任何帮助,

谢谢

【问题讨论】:

运行这段代码有什么问题? 该代码没有问题,但这并没有给我想要的结果,因为它是单个字符串而不是我想要的地图数组 请检查我附上的屏幕截图 我想做类似的事情怎么可能这样做,我只想将所有三个字段追加到单个数组中,而不是像我在上面给定代码中所做的那样追加到一个单独的字符串字段中 【参考方案1】:

我认为您正在寻找array-union operation。要将元素添加到 answer 数组中(如果其中尚不存在),请执行以下操作:

documentRef.updateData('answer': FieldValue.arrayUnion([
  'content': ans,
  'timestamp': DateTime.now().toString(),
  'username': _currentUser.displayName,
]));

【讨论】:

更新后如何在单独的小部件中阅读所有三个? 好的,我知道如何创建一个数组联合,但如何阅读它,如果你能展示我们如何阅读所有这三个字段值并在文本小部件中显示它们,那将非常有帮助 这是一个新问题,但可能是这样的:***.com/questions/50808513/… 或这样的:***.com/questions/54012067/… 您建议的用于读取数据的解决方案是使用地图,我不想使用地图来仅检索三个字段值是否有其他方法可以这样做,例如创建未来然后在其中存储一个值和使其在未来函数之外可访问 我刚刚更新了这个问题,包括阅读array-union 的一部分,现在你可以建议我一些方法或方式来阅读这三个值

以上是关于如何在 Flutter 中创建和读取一组键值对(映射)以在 Firestore 中存储数据的主要内容,如果未能解决你的问题,请参考以下文章

初识MapReduce

json

如何在 Flutter 中创建和使用 SnackBar 进行重用(全局)

如何使用 C# 为 OData 查询中指定的每个过滤器获取一组键/值对?

NSDictionary

怎样从对象中获取键值并保存在对象中