Using Flutter Downloader plugin, after download app closes
Maybe it late but it may help others. Recently I faced this error and I solved it. Your UI is rendering in Main isolate and your download events come from background isolate. Because codes in callback are run in the background isolate, so you have to handle the communication between two isolates. Usually, communication needs to take place to show download progress in the main UI. Implement the below code to handle communication:
import 'dart:isolate';
import 'dart:ui'; // You need to import these 2 libraries besides another libraries to work with this code
ReceivePort _port = ReceivePort();
@override
void initState() {
super.initState();
IsolateNameServer.registerPortWithName(_port.sendPort, 'downloader_send_port');
_port.listen((dynamic data) {
String id = data[0];
DownloadTaskStatus status = data[1];
int progress = data[2];
setState((){ });
});
FlutterDownloader.registerCallback(downloadCallback);
}
@override
void dispose() {
IsolateNameServer.removePortNameMapping('downloader_send_port');
super.dispose();
}
static void downloadCallback(String id, DownloadTaskStatus status, int progress) {
final SendPort send = IsolateNameServer.lookupPortByName('downloader_send_port')!;
send.send([id, status, progress]);
}
void _download(String url) async {
final status = await Permission.storage.request();
if(status.isGranted) {
final externalDir = await getExternalStorageDirectory();
final id = await FlutterDownloader.enqueue(
url: url,
savedDir: externalDir!.path,
showNotification: true,
openFileFromNotification: true,
);
} else {
print('Permission Denied');
}
}
Call _download(url) function in your button and you are ready to go.
N.B: I am using sound null safety in my app and for this reason I am using null aware operator in this line of code:
final SendPort send = IsolateNameServer.lookupPortByName('downloader_send_port')!;
Harsh Sureja
Updated on December 21, 2022Comments
-
Harsh Sureja over 1 year
**I use Flutter Downloader Package After complete download some file , my app closes automatically and disconnecte to the android studio. Any one help me to find soltutions.
final status = await Permission.storage.request(); if (status.isGranted) { await downloadPDF(); } downloadPDF() async { final externalDir = await getExternalStorageDirectory(); taskId = await FlutterDownloader.enqueue( url: pdfURL, savedDir: externalDir.path, fileName: "Flamingo Order Details", showNotification: true, openFileFromNotification: true, ); }
Here is my console error:
I/flutter (15913): Fatal: could not find callback F/libc (15913): Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 15956 (1.raster), pid 15913 (le.order_system) *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'motorola/chef/chef_sprout:10/QPTS30.61-18-16-8/03acd:user/release-keys' Revision: 'pvt' ABI: 'arm64' Timestamp: 2021-04-23 16:39:38+0530 pid: 15913, tid: 15956, name: 1.raster >>> com.example.order_system <<< uid: 10870 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 Cause: null pointer dereference x0 000000741e5a6478 x1 00000074841cfa00 x2 0000000000000001 x3 0000000000000000 x4 0000000000000000 x5 00000000ffffffff x6 00000000ffffffff x7 0000000b96c6a75c x8 0000000080000081 x9 658adf78f7e836ee x10 0000000000000000 x11 0000000000000000 x12 0000000000000001 x13 000000747b19fe80 x14 0000007489a0a280 x15 0000000000000000 x16 000000747b19b050 x17 0000007515c9787c x18 000000741d05e000 x19 000000741e5a6478 x20 00000074841cfa00 x21 0000000000000001 x22 0000000000000000 x23 00000074843db380 x24 000000741e5a7020 x25 000000741e5a7020 x26 0000000000000000 x27 0000000000000001 x28 0000000000000043 x29 000000741e5a6450 sp 000000741e5a6420 lr 000000747b013f84 pc 000000747b01c378 backtrace: #00 pc 00000000001d8378 /vendor/lib64/egl/libGLESv2_adreno.so (BuildId: 22cc95e0051ae85072c405eeeeeb312d) #01 pc 00000000001cff80 /vendor/lib64/egl/libGLESv2_adreno.so (BuildId: 22cc95e0051ae85072c405eeeeeb312d) #02 pc 00000000000207b0 /system/lib64/libEGL.so (android::eglSwapBuffersWithDamageKHRImpl(void*, void*, int*, int)+316) (BuildId: 248ba7f2d80e7bb9952a20e1c3493c86) #03 pc 000000000001d0a8 /system/lib64/libEGL.so (eglSwapBuffers+80) (BuildId: 248ba7f2d80e7bb9952a20e1c3493c86) #04 pc 00000000012ec528 /data/app/com.example.order_system-8XYsushVsEZPOltQ3k8npA==/lib/arm64/libflutter.so (BuildId: e14966237eb013b063fed6484195268f7398b594) Lost connection to device.