Baseflow / Baseflow/flutter_cache_manager

[flutter_cache_manager_firebase] PlatformException(download_error, Object does not exist at location., null, null)

Open
#240 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Dart
Stars
809
Forks
510
Avg merge
6m
Merged PRs (30d)
1

Description

## 🐛 Bug Report

I'm trying to get an audio file using a valid `gs://` path and it's throwing a platform exception:

```
E/flutter ( 8213): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(download_error, Object does not exist at location., null, null)
E/flutter ( 8213): #0 StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:582
E/flutter ( 8213): #1 MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:159
E/flutter ( 8213):
E/flutter ( 8213): #2 MethodChannel.invokeMethod
package:flutter/…/services/platform_channel.dart:332
E/flutter ( 8213): #3 StorageReference.getDownloadURL
package:firebase_storage/src/storage_reference.dart:142
E/flutter ( 8213): #4 FirebaseHttpFileService.get
package:flutter_cache_manager_firebase/src/firebase_http_file_service.dart:12
E/flutter ( 8213): #5 WebHelper._download
package:flutter_cache_manager/…/web/web_helper.dart:76
E/flutter ( 8213): #6 WebHelper._updateFile
package:flutter_cache_manager/…/web/web_helper.dart:58
E/flutter ( 8213): #7 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 8213): #8 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 8213): #9 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
```

I know it's a valid location too as replacing

```dart
final file = await FirebaseCacheManager().getSingleFile(audioURL);
```

with

```dart
final dir = (await getApplicationDocumentsDirectory()).path;
final filePath = path.join(dir, path.basename(audioURL));
final file = File(filePath);
final ref = await firebaseStorage.getReferenceFromUrl(audioURL);
await ref.writeToFile(file);
```

correctly fetches the file.

This library's current implementation calls `getDownloadURL()` but that creates a revokable token as a side effect and even has a potential rate cost (I read this in a SO post but can't find it). As a workaround, maybe could we replace this:

```dart
class FirebaseHttpFileService extends HttpFileService {
@override
Future get(String url,
{Map headers = const {}}) async {
var ref = FirebaseStorage.instance.ref().child(url);
var _url = await ref.getDownloadURL() as String;

return super.get(_url);
}
}
```

with

```dart
class FirebaseHttpFileService extends HttpFileService {
@override
Future get(String url,
{Map headers = const {}}) async {
var ref = await FirebaseStorage.instance.getReferenceFromUrl(url);

final streamedResponse =
StreamedResponse(ref.getData(32000).asStream(), 200);

return HttpGetResponse(streamedResponse);
}
}
```

**Version:** 1.x
flutter_cache_manager_firebase: 1.0.1

```
[✓] Flutter (Channel dev, 1.23.0-18.0.pre, on Mac OS X 10.15.6 19G2021 x86_64, locale en-US)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 11.7)
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.0)
[✓] Connected device (3 available)

• No issues found!
```

Contributor guide

Open the contributing guide

Research direction

Start in flutter_cache_manager_firebase/src/firebase_http_file_service.dart, especially FirebaseHttpFileService.get, and compare the current getDownloadURL path with the reported getReferenceFromUrl and getData approach. Reproduce the valid gs:// download and verify that the cache manager fetches the file without the PlatformException.

Written by the indexing model from the issue text.

Assessment

Tech stack
dart, firebase
Domain
cloud, mobile
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.