簡體   English   中英

如何使用 Flutter 在 FireStore 的集合中創建文檔

[英]How to create document in collection in FireStore with Flutter

集合在 Firebase 控制台上有默認權限。

我使用 email 和密碼正確登錄我的用戶。

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 中的文檔創建

似乎問題出在我創建地圖的方式上。

  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");
  });

此代碼現在有效

FirestoreFirebaseFirestore取代,很多 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'));

有2種方式:

1.自定義文檔ID

使用set()方法

final city = <String, String>{
  "name": "Los Angeles",
  "state": "CA",
  "country": "USA"
};

FirebaseFirestore.instance
    .collection("cities")
    .doc("LA")
    .set(city)
    .onError((e, _) => print("Error writing document: $e"));

2. Firebase 生成的Document ID

使用add()方法

final data = {"name": "Tokyo", "country": "Japan"};

FirebaseFirestore.instance
           .collection("cities")
           .add(data).then((documentSnapshot) =>
               print("Added Data with ID: ${documentSnapshot.id}"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM