Har*_*eja 5 download-manager android-download-manager flutter flutter-dependencies flutter-packages
**我使用 Flutter Downloader Package 完成下载一些文件后,我的应用程序自动关闭并断开与 android studio 的连接。任何人都可以帮助我找到解决方案。
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,
);
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制台错误:
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,
);
}
Run Code Online (Sandbox Code Playgroud)
也许晚了,但它可能会帮助其他人。最近我遇到了这个错误并解决了它。您的 UI 正在主隔离中呈现,而您的下载事件来自后台隔离。因为回调中的代码是在后台隔离运行的,所以你必须处理两个隔离之间的通信。通常,需要进行通信以在主 UI 中显示下载进度。实现以下代码来处理通信:
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');
}
}
Run Code Online (Sandbox Code Playgroud)
在您的按钮中调用 _download(url) 函数,您就可以开始了。
注意:我在我的应用程序中使用了声音空安全,因此我在这行代码中使用了空感知运算符:
final SendPort send = IsolateNameServer.lookupPortByName('downloader_send_port')!;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |