Firebase Flatter Firestorage getDownloadUrl()返回NoSuchMethodError

Firebase Flatter Firestorage getDownloadUrl()返回NoSuchMethodError,firebase,flutter,firebase-storage,injectable,Firebase,Flutter,Firebase Storage,Injectable,在我的Flatter应用程序中,我试图将一个图像上传到Firebase存储,然后获取URL。图像正在上载,我可以在web界面中看到它,但是当我对有效引用调用getDownloadUrl()时(我可以通过调试器看到相对路径)我得到的类型“NoSuchMethodError”不是类型“Exception”的子类型,实际错误发生在方法通道\u引用中。dart由于某种原因,其中存储为空,因此存储。app抛出错误 @override Future<String /*!*/ > getDo

在我的Flatter应用程序中,我试图将一个图像上传到Firebase存储,然后获取URL。图像正在上载,我可以在web界面中看到它,但是当我对有效引用调用getDownloadUrl()时(我可以通过调试器看到相对路径)我得到的
类型“NoSuchMethodError”不是类型“Exception”的子类型
,实际错误发生在
方法通道\u引用中。dart
由于某种原因,其中
存储
为空,因此
存储。app
抛出错误

 @override
  Future<String /*!*/ > getDownloadURL() async {
    try {
      Map<String, dynamic> data = await MethodChannelFirebaseStorage.channel
          .invokeMapMethod<String, dynamic>(
              'Reference#getDownloadURL', <String, dynamic>{
        'appName': storage.app.name,
        'maxOperationRetryTime': storage.maxOperationRetryTime,
        'maxUploadRetryTime': storage.maxUploadRetryTime,
        'maxDownloadRetryTime': storage.maxDownloadRetryTime,
        'bucket': storage.bucket,
        'path': fullPath,
      });

      return data['downloadURL'];
    } catch (e) {
      throw convertPlatformException(e);
    }
  }

我尝试清理、重建和降级依赖项。在这一点上,我不知道该怎么看。我猜问题在于存储实例被删除或根本没有初始化,但是为什么上传可以工作呢?欢迎提供任何帮助。

我希望这能对您有所帮助,但您可以将每个产品或用户的链接存储在
文档中的每次上传中

例如,在这种方法中,您可以从同一
文档
中检索链接文件,而不需要其他方法来检索它

在此代码中,您可以上载文件,并在上载完文件后还原
downloadUrl

 static Future<dynamic> uploadFile(
      {@required File imageFile, @required String folderPath}) async {
    String fileName = DateTime.now().millisecondsSinceEpoch.toString();

    Reference reference =
    FirebaseStorage.instance.ref().child(folderPath).child(fileName);

    TaskSnapshot storageTaskSnapshot = await reference.putFile(imageFile);
    // TaskSnapshot storageTaskSnapshot =  uploadTask.snapshot;

    print(storageTaskSnapshot.ref.getDownloadURL());

    var dounloadUrl = await storageTaskSnapshot.ref.getDownloadURL();

    return dounloadUrl;
  }
静态未来上传文件(
{@required File imageFile,@required String folderPath})异步{
字符串文件名=DateTime.now().millissecondssinceepoch.toString();
参考文献=
FirebaseStorage.instance.ref().child(folderPath).child(文件名);
TaskSnapshot-storageTaskSnapshot=wait reference.putFile(imageFile);
//TaskSnapshot storageTaskSnapshot=uploadTask.snapshot;
打印(storageTaskSnapshot.ref.getDownloadURL());
var dounladurl=等待storageTaskSnapshot.ref.getDownloadURL();
返回dounladurl;
}
当我从

@lazySingleton
FirebaseStorage get firebaseStorage => FirebaseStorage.instanceFor(bucket: "bucket-url");
对此

@lazySingleton
FirebaseStorage get firebaseStorage => FirebaseStorage.instance;
错误消失了,一切正常

我使用bucket URL的主要原因是因为我在使用project flavors和两个Firebase项目。单独的
googleservices.json
对于Android来说似乎已经足够了(到目前为止还没有测试过iOS)。然而,为什么上传有效,但下载无效对我来说仍然是一个很大的疑问

@lazySingleton
FirebaseStorage get firebaseStorage => FirebaseStorage.instanceFor(bucket: "bucket-url");
@lazySingleton
FirebaseStorage get firebaseStorage => FirebaseStorage.instance;