Firebase Flatter Firestorage getDownloadUrl()返回NoSuchMethodError
在我的Flatter应用程序中,我试图将一个图像上传到Firebase存储,然后获取URL。图像正在上载,我可以在web界面中看到它,但是当我对有效引用调用getDownloadUrl()时(我可以通过调试器看到相对路径)我得到的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
类型“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;