首页 > 解决方案 > 无法将 Storage Firebase 映像正确链接到 Cloud Firestore

问题描述

我不明白为什么我无法链接并将 URL 发送到 cloud firestore 集合文档图像在存储中正确拾取但无法在 cloud firestore db 中获取 URL 这是我的代码:


  bool isLoading = false;
  var firebaseUser =  FirebaseAuth.instance.currentUser;


  Future uploadImage(BuildContext context) async {
    String fileName = basename(_imageFile.path);
    Reference firebaseStorageRef =
    FirebaseStorage.instance.ref().child('uploads/$fileName');
    UploadTask uploadTask = firebaseStorageRef.putFile(_imageFile);
    TaskSnapshot taskSnapshot = await uploadTask.whenComplete(() => null);
    if (taskSnapshot == null) {
      final String downloadUrl =
      await taskSnapshot.ref.getDownloadURL();
      await FirebaseFirestore.instance.doc(firebaseUser.uid)
          .collection("influncerUser")
          .add({"imageUrl": downloadUrl,});
      setState(() {
        isLoading = true;
      });
    }
  }

标签: firebasefluttergoogle-cloud-firestorefirebase-storage

解决方案


首先,为什么要使用if (taskSnapshot == null)?如果 taskSnapshot 为 null,则无法获取下载 url,因此请将其删除。

其次,更喜欢使用onComplete而不是 .whenComplete(() => null)

Future uploadImage(BuildContext context) async {
String fileName = basename(_imageFile.path);
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('uploads/$fileName');
UploadTask uploadTask = firebaseStorageRef.putFile(_imageFile);

// use onComplete to await when the doc has been pushed.
TaskSnapshot taskSnapshot = await uploadTask.onComplete;

final String downloadUrl = await taskSnapshot.ref.getDownloadURL();
await FirebaseFirestore.instance.doc(firebaseUser.uid)
    .collection("influncerUser")
    .add({"imageUrl": downloadUrl,});
setState(() => isLoading = true);

}


推荐阅读