NoSuchMethodError: 在 null 上调用了方法“存在同步”

时间:2021-06-16 05:05:35

标签: firebase flutter file-upload firebase-authentication imagepicker

 Future uploadFile() async {
    String fileName = DateTime.now().toString();
    StorageReference reference =
        FirebaseStorage.instance.ref().child('$fileName');
    StorageUploadTask uploadTask = reference.putFile(image);
    StorageTaskSnapshot storageTaskSnapshot = await uploadTask.onComplete;
    await storageTaskSnapshot.ref.getDownloadURL().then((downloadUrl) {
      setState(() {
        imageUrl = downloadUrl;
        print("image path===>" + imageUrl);
      });
    }, onError: (err) {
      setState(() {});
      toast(text: thisFileNotInImage);
    });
  }

2 个答案:

答案 0 :(得分:0)

我认为 putFile 返回一个 Future,所以做这样的事情,

StorageTaskSnapshot storageTaskSnapshot = await uploadTask()

我们在使用 await 时不需要 .then,这里

await storageTaskSnapshot.ref.getDownloadURL().then

参考:https://dart.dev/codelabs/async-await

答案 1 :(得分:0)

看来您的 image 变量为空。在将图像传递到 Reference.putFile() 方法之前,确保图像不为空。

错误出现在这一行:

    StorageUploadTask uploadTask = reference.putFile(image);

查看下面 Reference.putFile() 的实现。错误似乎来自断言。

    UploadTask putFile(File file, [SettableMetadata? metadata]) {
      assert(file.absolute.existsSync());
      return UploadTask._(storage, _delegate.putFile(file, metadata));
    }