【问题标题】:How to create document in collection in FireStore with Flutter如何使用 Flutter 在 FireStore 中创建集合中的文档
【发布时间】:2018-10-29 11:17:30
【问题描述】:

集合在 Firebase 控制台上具有默认权限。

我使用电子邮件和密码正确登录了我的用户。

user = await _auth.signInWithEmailAndPassword( email: "email@gmail.com", password: "password");

然后在成功将图像上传到 FireStorage 后,我尝试运行事务以及更新文档。

  var fileName = _textController.text.toLowerCase();
  StorageUploadTask putFile =
      storage.ref().child("region/$fileName").putFile(_regionImage);

  UploadTaskSnapshot uploadSnapshot = await putFile.future;

  var regionData = new Map();
  regionData["label"] = _textController.text;
  var pictureData = new Map();
  pictureData["url"] = uploadSnapshot.downloadUrl.toString();

  pictureData["storage"] = "gs://app-db.appspot.com/region/$fileName";
  regionData["picture"] = pictureData;

  DocumentReference currentRegion =
      Firestore.instance.collection("region").document(fileName);

  Firestore.instance.runTransaction((transaction) async {
    DocumentSnapshot freshSnap = await transaction.get(currentRegion);
    print(freshSnap.exists);
    //await transaction.set(freshSnap.reference, regionData);
    await transaction.set(currentRegion, regionData);
    print("instance created");
  });

我在尝试运行事务时收到此错误。

如果我尝试设置为freshSnap.reference 或直接设置为currentRegion,也是一样的。 https://gist.github.com/matejthetree/f2a57c929d01919bd46da8ca6d5b6fb1

请注意,在第 15 行交易开始时出现错误,但在我没有收到 FireStorage 的身份验证令牌错误之前,尽管我已成功将图像上传和下载到存储。

我应该如何在 FireStore 中创建文档

【问题讨论】:

    标签: firebase flutter


    【解决方案1】:

    似乎问题出在我创建地图的方式上。

      Map<String, dynamic> regionData = new Map<String, dynamic>();
      regionData["label"] = _textController.text;
      Map<String, dynamic> pictureData = new Map<String, dynamic>();
      pictureData["url"] = uploadSnapshot.downloadUrl.toString();
    
      pictureData["storage"] = "gs://app-db.appspot.com/region/$fileName";
      regionData["picture"] = pictureData;
    
      DocumentReference currentRegion =
          Firestore.instance.collection("region").document(fileName);
    
      Firestore.instance.runTransaction((transaction) async {
        await transaction.set(currentRegion, regionData);
        print("instance created");
      });
    

    此代码现在可以使用

    【讨论】:

      【解决方案2】:

      Firestore 替换为FirebaseFirestore 并且更新了很多API。

      var myData = {'foo': 0, 'bar': true};
      
      var collection = FirebaseFirestore.instance.collection('collection');
      collection 
          .add(myData) // <-- Your data
          .then((_) => print('Added'))
          .catchError((error) => print('Add failed: $error'));
      

      【讨论】:

        猜你喜欢
        • 2020-06-26
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        • 2021-02-20
        • 2019-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多