Open rivetingpeppermint opened 4 years ago
Here's my flutter doctor
results for good measure:
[✓] Flutter (Channel stable, v1.12.13+hotfix.5, on Mac OS X 10.14.6 18G95, locale en-ID)
• Flutter version 1.12.13+hotfix.5 at /Users/ictmacbook2/flutter
• Framework revision 27321ebbad (3 months ago), 2019-12-10 18:15:01 -0800
• Engine revision 2994f7e1e6
• Dart version 2.7.0
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
• Android SDK at /Users/ictmacbook2/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-29, build-tools 29.0.3
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 10.3)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 10.3, Build version 10G8
• CocoaPods version 1.7.5
[✓] Android Studio (version 3.5)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 43.0.1
• Dart plugin version 191.8593
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
[✓] VS Code (version 1.42.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.8.1
[✓] Connected device (1 available)
• iPad • 1ba96acf871024d9097348342ff6d84fe5013c16 • ios • iOS 12.4.1
• No issues found!
On iOS culprit error ERROR_INVALID_TASK_ID
On Android culprit error is invalid_task_id
I think the problem is that either the task is not being enqueued successfully, thus there's no associated download task with TaskID. Or After enqueuing it, it's not being resumed successfully.
Refer to the stream listener's closure:
String id = data[0];
DownloadTaskStatus status = data[1];
if (status.toString() == "DownloadTaskStatus(3)") {
FlutterDownloader.open(taskId: id);
}
Please make sure to check for null-safety of data[0] and data[1] before using them, and see what their values are.
Also change this expression
if (status.toString() == "DownloadTaskStatus(3)")
To this:
if (status == DownloadStatus.COMPLETE)
@om-ha I've tried changing my if to this: if (status.toString() == "DownloadTaskStatus(3)" && progress == 100 &&id!=null)
. Can't use if (status == DownloadStatus.COMPLETE)
because the statuses are DownloadTaskStatus(2), DownloadTaskStatus(3)
, and so on.
The tasks run smoothly sometimes, and sometimes they're just enqueued and not executed. For example, I got this: Download task is enqueued with id(4ba7a418-32a9-4ece-b538-9e469bd1d784)
and nothing else, it just stops there.
It appears that the tasks won't run after I performed hot restart. After each build, everything works fine, but once I hot restart, none of the tasks would run.
Yeah hot restart could interfere with the download tasks integrity. This needs confirmation though.
Hi, I'm facing a similar issue only on IOS, I want to open the file as soon as it is downloaded without pressing any button, so I have modified the function in the example project in this repo to something like below
void _bindBackgroundIsolate() {
bool isSuccess = IsolateNameServer.registerPortWithName(_port.sendPort, 'downloader_send_port');
if (!isSuccess) {
_unbindBackgroundIsolate();
_bindBackgroundIsolate();
return;
}
_port.listen((dynamic data) {
if (debug) {
print('UI Isolate Callback: $data');
}
String id = data[0];
DownloadTaskStatus status = data[1];
int progress = data[2];
final task = _tasks?.firstWhere((task) => task.taskId == id);
if (task != null) {
setState(() {
task.status = status;
task.progress = progress;
});
if (task.status != null && task.status == DownloadTaskStatus.complete && task.taskId != null) {
_openDownloadedFile(task).then((success) {
if (!success) {
Scaffold.of(context).showSnackBar(SnackBar(content: Text('Cannot open this file')));
}
});
}
}
});
}
for the above code I get error saying
not found task corresponding to given task id
but however adding a Future.delayed inside the if condition solves the problem.It works fine on android even without adding Future.delayed.
below is the modified
void _bindBackgroundIsolate() {
bool isSuccess = IsolateNameServer.registerPortWithName(_port.sendPort, 'downloader_send_port');
if (!isSuccess) {
_unbindBackgroundIsolate();
_bindBackgroundIsolate();
return;
}
_port.listen((dynamic data) {
if (debug) {
print('UI Isolate Callback: $data');
}
String id = data[0];
DownloadTaskStatus status = data[1];
int progress = data[2];
final task = _tasks?.firstWhere((task) => task.taskId == id);
if (task != null) {
setState(() {
task.status = status;
task.progress = progress;
});
if (task.status != null && task.status == DownloadTaskStatus.complete && task.taskId != null) {
Future.delayed(Duration(seconds: 2), () {
_openDownloadedFile(task).then((success) {
if (!success) {
Scaffold.of(context).showSnackBar(SnackBar(content: Text('Cannot open this file')));
}
});
});
}
}
});
}
am I missing something?
Thank you.
I have this same problem on iOS simulator. Thank you LaxmikanthMadhyastha for the Future.delayed fix - this seems to solve the problem for me. However, it's a bit of a hack, and it would be nice if this could be solved in the package :)
Any solution so far ?
look at this it may help
On both Android and iOS, downloads sometimes fail with this error message:
flutter: not found task corresponding to given task id
I found that running
flutter clean
and rebuilding the app seems to make this disappear for a bit (download successful and file can be opened in relevant applications), but when I build the app again after changing something, the error returns. I've enabled Android cleartext traffic, to no avail.Here's a minimal reproduction of my code: