如何一次将数据发送到 FirebaseFirestore 和 firebase_storage

how to send data to FirebaseFirestore and firebase_storage at once

我在使用 firebase 和 flutter 时遇到了一些困难。在这段代码中,我试图创建一个用户,将图像发送到 fireStore,并将所有数据放入 firebase firestore。它正在创建用户,但出于某种原因,它要么没有将数据发送到 firebase firestore,要么没有将图像放入 firebase 存储。这些功能中只有一个可用,但不能同时使用。

当我删除代码时:

final imageRef = firebase_storage.FirebaseStorage.instance
    .ref()
    .child("userImage")
    .child(FirebaseAuth.instance.currentUser.uid + ".jpg");

await imageRef.putFile(image);

  "userImage": imageRef.getDownloadURL(), // and deleted this field from the collection

FirebaseFirestore.instance 工作正常。 当我删除这段代码时:

FirebaseFirestore.instance
    .collection("User")
    .doc(_authResult.user.uid)
    .set({
  "userName": userName,
  "email": email,
  "password": passWord,
  "userImage": imageRef.getDownloadURL(),
});

imageRef.putFile 工作并进入存储。

所以出于某种原因,它们以某种方式相互影响。我怎样才能让这两个功能发挥作用?

完整代码如下:

UserCredential _authResult = await FirebaseAuth.instance
        .createUserWithEmailAndPassword(email: email, password: passWord);
    setState(() {
      isLoading = true;
    });
    
    final imageRef = firebase_storage.FirebaseStorage.instance
        .ref()
        .child("userImage")
        .child(FirebaseAuth.instance.currentUser.uid + ".jpg");
    
    await imageRef.putFile(image);
    
    FirebaseFirestore.instance
        .collection("User")
        .doc(_authResult.user.uid)
        .set({
      "userName": userName,
      "email": email,
      "password": passWord,
      "userImage": imageRef.getDownloadURL(),
    });

getDownloadURL doesn't return a string. It returns a Future that you should await in order to get the string. See the documentation 例如:

  String downloadURL = await firebase_storage.FirebaseStorage.instance
      .ref('users/123/avatar.jpg')
      .getDownloadURL();