2

I'm using flutter_downloader package for download files in Flutter. File gets downloaded in Downloads folder. After file downloaded notification showing failed to download and the below error is throwing. I trapped on this error almost 2 days, your help will save my day.

This is the code:

void _download(String url) async {
    final status = await Permission.storage.request();

    if (status.isGranted) {
      final externalDir = await getExternalStorageDirectory();

      final id = await FlutterDownloader.enqueue(
        fileName: "LRMonoPhase4.mp3",
        url: 'https://www.kozco.com/tech/LRMonoPhase4.mp3',
        savedDir: '/storage/emulated/0/Download',
        showNotification: true,
        openFileFromNotification: true,
      );
      util.showToast(id.toString());
    } else {
      print('Permission Denied');
    }
  }

This the manifest

<provider
            android:name="vn.hunghd.flutterdownloader.FlutterDownloaderInitializer"
            android:authorities="${applicationId}.flutter-downloader-init"
            android:exported="false">
            <!-- changes this number to configure the maximum number of concurrent tasks -->
            <meta-data
                android:name="vn.hunghd.flutterdownloader.MAX_CONCURRENT_TASKS"
                android:value="5" />
        </provider>

This is the error

D/DownloadWorker( 9655): Update too frequently!!!!, this should be dropped
D/DownloadWorker( 9655): Update too frequently!!!!, this should be dropped
D/EGL_emulation( 9655): app_time_stats: avg=19.11ms min=7.88ms max=35.05ms count=53
D/DownloadWorker( 9655): Update notification: {notificationId: 11, title: LRMonoPhase4.mp3, status: RUNNING, progress: 100}
D/DownloadWorker( 9655): Update too frequently!!!!, but it is the final update, we should sleep a second to ensure the update call can be processed
D/EGL_emulation( 9655): app_time_stats: avg=21.50ms min=8.00ms max=35.47ms count=46
D/DownloadWorker( 9655): Update notification: {notificationId: 11, title: LRMonoPhase4.mp3, status: FAILED, progress: -1}
W/System.err( 9655): java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Download/LRMonoPhase4.mp3
W/System.err( 9655):    at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:825)
W/System.err( 9655):    at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:450)
W/System.err( 9655):    at vn.hunghd.flutterdownloader.IntentUtils.buildIntent(IntentUtils.kt:19)
W/System.err( 9655):    at vn.hunghd.flutterdownloader.IntentUtils.validatedFileIntent(IntentUtils.kt:36)
W/System.err( 9655):    at vn.hunghd.flutterdownloader.DownloadWorker.downloadFile(DownloadWorker.kt:445)
W/System.err( 9655):    at vn.hunghd.flutterdownloader.DownloadWorker.doWork(DownloadWorker.kt:208)
W/System.err( 9655):    at androidx.work.Worker$1.run(Worker.java:86)
W/System.err( 9655):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
W/System.err( 9655):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
W/System.err( 9655):    at java.lang.Thread.run(Thread.java:1012)
I/WM-WorkerWrapper( 9655): Worker result FAILURE for Work [ id=69548c69-93cb-47f0-b54e-a23e199f96af, tags={ flutter_download_task, vn.hunghd.flutterdownloader.DownloadWorker } ]
Anand
  • 4,355
  • 2
  • 35
  • 45

1 Answers1

2

There is some strange points in the code above. First please use your dir.path variable (not harcode your path).

Then flutter downloader can generate a unique id for the file if you don't specify file name. If you want to force the name : fileName is working even if this filename is not unique. It's generate the "same" notification and you can open the file too.

If you check the directory you will see that the second file name will be replace file (filename (1)).

if(statuses[Permission.storage]!.isGranted){
          var dir = await getExternalStorageDirectory();
          if(dir != null) {
            final taskId = await FlutterDownloader.enqueue(
              url: instructionUrl,
              headers: {}, // optional: header send with url (auth token etc)
              savedDir: dir.path,
              /*fileName:"uniquename",*/
              showNotification: true, // show download progress in status bar (for Android)
              saveInPublicStorage: true,
              openFileFromNotification: true, // click on notification to open downloaded file (for Android)
            );
          }
Zhar
  • 3,330
  • 2
  • 24
  • 25