Dart 未处理的异常:[firebase_storage/unknown] 位置不应该是完整的 URL

Dart Unhandled Exception: [firebase_storage/unknown] location should not be a full URL

我尝试使用插件 https://pub.dev/packages/flutter_cache_manager_firebase 缓存保存在 firebase 存储中的音频 url

https://firebasestorage.googleapis.com/v0/b/ocwa-app.appspot.com/o/142-1624205564448.aac?alt=media&token=b06a7cf9-5050-43ad-b5e9-60c4eda85b54

当我将 url 传递给方法时

file = await FirebaseCacheManager().getSingleFile(widget.url);

并在控制台中抛出错误

E/flutter (32343): [ERROR:flutter/shell/common/shell.cc(103)] Dart Unhandled Exception: [firebase_storage/unknown] location should not be a full URL., stack trace: #0      MethodChannelReference.getDownloadURL (package:firebase_storage_platform_interface/src/method_channel/method_channel_reference.dart:59:7)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #1      FirebaseHttpFileService.get (package:flutter_cache_manager_firebase/src/firebase_http_file_service.dart:12:16)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #2      WebHelper._updateFile (package:flutter_cache_manager/src/web/web_helper.dart:99:22)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #3      WebHelper._downloadOrAddToQueue (package:flutter_cache_manager/src/web/web_helper.dart:67:7)
E/flutter (32343): <asynchronous suspension>

请告诉我如何将正确的 url 传递给参数。我目前使用的url是来自

的downloadUrlreturn
Future uploadAudio() async {
    final uploadTimestamp = DateTime.now().millisecondsSinceEpoch;
    setState(() {
      fileName =
          getImageFileName(G.loggedInId.toString(), '$uploadTimestamp');
      fileName = fileName + '.aac';
    });

    Reference reference = FirebaseStorage.instance.ref().child(fileName);
    TaskSnapshot uploading;
    uploading = await reference.putFile(
        File(recordingFile), SettableMetadata(contentType: 'audio/aac'));
    return uploading.ref.getDownloadURL();
  }

您需要从 URL 中删除方案。

你可以这样做:

final String url = widget.url;

final Uri uri = Uri.parse(url);

final urlWithoutScheme = url.replaceFirst('${uri.scheme}://', '');

///Pass it to the getSingleFile method
file = await FirebaseCacheManager().getSingleFile(urlWithoutScheme);

下面的代码是 https://github.com/firebase/firebase-android-sdk/blob/master/firebase-storage/src/main/java/com/google/firebase/storage/FirebaseStorage.java.

抛出错误的地方
    if (lowerCaseLocation.startsWith("gs://")
            || lowerCaseLocation.startsWith("https://")
            || lowerCaseLocation.startsWith("http://")) {
          throw new IllegalArgumentException("location should not be a full URL.");