firebase - 如何使用flutter中的Map在Firestore中动态添加特定集合的文档的字段?

标签 firebase flutter dart google-cloud-firestore hashmap

我有DatabaseService类,在其中维护和更新数据。我正在使用 map 动态更新Firebase中某些集合的文档数据,但是我无法成功更新所有我正在使用简单的forEach从Map提取数据并将其存储在Firebase中的数据

import 'package:home_crisp/models/user.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class DatabaseService {
  // collection reference is just reference for certain collection

  final CollectionReference chefCollection =
      Firestore.instance.collection('chef');

  final String uid;
  DatabaseService({this.uid});

  Future updateChefData(Map<String, dynamic> dataMap) async {
    // await chefCollection.document(uid).setData({
    //   'chefName': chefName,
    //   'chefPhNo': chefPhNo,
    //   'chefDateOfBirth': chefDateOfBirth,
    // });
    dataMap.forEach(
      (key, value) async {
        await chefCollection.document(uid).setData({
          key: value,   // Key represent the field key and value is actual value of firebase document i.e. chefName: "Peter" 
        });
      },
    );
  }

在“chefRegistration”类中,我将值封装在Map中并将其发送到dataServices中的updateChefData函数
class chefRegistration extends StatefulWidget {
  @override
  _chefRegistrationState createState() => _chefRegistrationState();
}
class _chefRegistrationState extends State<chefRegistration> {

  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);

// ~
// ~
// Some Code
// ~ 
// ~


FlatButton(
   onPressed: () async {
   Map<String, dynamic> dataMap = {
                'chefName': this.chefName,
                'chefPhNo': this.phoneNo,
                'chefDateOfBirth': this.dateOfBirth,
               };

                await DatabaseService(uid: user.uid).updateChefData(dataMap);
   }
} 

以下是我希望其工作方式的屏幕截图

enter image description here

但问题在于它仅更新了dateOfBirth的文档的最后一个字段

enter image description here

最佳答案

您将要使用updateData()而不是setData()。或者,您可以将merge: true作为第二个参数传递给setData()

关于firebase - 如何使用flutter中的Map在Firestore中动态添加特定集合的文档的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61580359/

相关文章:

android - 如何从 firebase 下载 pdf 并从我的应用程序目录访问它?

flutter - 在Flutter中具有路由的持久性BottomNavigationBar

android - 从 FirebaseMessagingService 调用 Activity 方法

firebase - Flutter - 如何使用 Firebase Auth 访问 StreamBuilder 中 future 的值(value)

swift - 将 Firestore 数据显示到 UIPicker Swift 4

javascript - 未捕获的类型错误 : Cannot read property 'initializeApp' of undefined

flutter - SingleChildScrollView 'cutting' 屏幕

string - 如何在 Dart 中删除字符串的特定部分?

dart - Flutter - 从其他小部件调用 setState()

flutter - 我如何将字符串类型 "Timestamp(seconds=1621176915, nanoseconds=276147000)"转换为实际时间戳类型?