copyFileIntoDownloadFolder method
Future<SavedDownload?>
copyFileIntoDownloadFolder(
- String filePath,
- String fileName, {
- File? file,
- String? desiredExtension,
- String? subDirectoryPath,
- bool openAfterSave = false,
override
Implementation
@override
Future<SavedDownload?> copyFileIntoDownloadFolder(
String filePath,
String fileName, {
File? file,
String? desiredExtension,
String? subDirectoryPath,
bool openAfterSave = false,
}) async {
final androidSdkVersion = Platform.isAndroid
? await getCurrentAndroidSdkVersion()
: 0;
final fileToCopy = file ?? File(filePath);
// Android 10+ goes through MediaStore so we don't need MANAGE_EXTERNAL_STORAGE.
if (Platform.isAndroid && androidSdkVersion >= 29) {
final result = await methodChannel
.invokeMapMethod<String, dynamic>('saveFileUsingMediaStore', {
'filePath': fileToCopy.path,
'fileName': p.basenameWithoutExtension(fileName),
'extension': desiredExtension ?? p.extension(fileToCopy.path),
'subDirectoryPath': subDirectoryPath,
'openAfterSave': openAfterSave,
});
if (result == null) return null;
final path = result['path'] as String?;
if (path == null) return null;
final uri = result['uri'] as String?;
return SavedDownload(
file: File(path),
contentUri: uri == null ? null : Uri.parse(uri),
);
}
// Legacy Android / all other platforms: plain file copy.
final folderPath = p.absolute(
(await getDownloadFolder()).path,
subDirectoryPath,
);
final copied = await fileToCopy.copyTo(
folderPath,
fileName,
desiredExtension: desiredExtension ?? p.extension(fileToCopy.path),
);
if (openAfterSave) {
await _openLocalFile(copied);
}
return SavedDownload(file: copied);
}