firebase 如何使用Flutter在FireStore中创建集合文档

nx7onnlm  于 2023-01-18  发布在  Flutter
关注(0)|答案(3)|浏览(169)

集合在Firebase Console上具有默认权限。
我使用电子邮件和密码正确登录我的用户。
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中创建文档

v09wglhw

v09wglhw1#

看起来问题出在我绘制Map的方法上。

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

此代码现在有效

chhkpiq4

chhkpiq42#

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'));
ddarikpa

ddarikpa3#

使用null safety更新2023

有两种方法:

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生成的文档ID

使用add()方法

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

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

相关问题