post_enrollment_app/lib/pages/helpers/file_download_web.dart

49 lines
1.4 KiB
Dart

import 'dart:html' as html;
import 'package:http/http.dart' as http;
import 'download_result.dart';
import 'file_download_common.dart';
Future<DownloadResult> downloadFileFromUrlImpl(
String url, {
String? fileName,
Map<String, String>? headers,
bool openAfterDownload = false,
}) async {
try {
final name = fileName ?? fileNameFromUrl(url);
final response = await http.get(Uri.parse(url), headers: headers);
if (response.statusCode != 200) {
return DownloadResult.failure(
'Download failed (${response.statusCode})',
);
}
final blob = html.Blob([response.bodyBytes]);
final objectUrl = html.Url.createObjectUrlFromBlob(blob);
final anchor = html.AnchorElement(href: objectUrl)
..download = name
..style.display = 'none';
html.document.body?.append(anchor);
anchor.click();
anchor.remove();
html.Url.revokeObjectUrl(objectUrl);
return DownloadResult.success(message: 'E-Card downloaded');
} catch (_) {
try {
final name = fileName ?? fileNameFromUrl(url);
final anchor = html.AnchorElement(href: url)
..download = name
..style.display = 'none';
html.document.body?.append(anchor);
anchor.click();
anchor.remove();
return DownloadResult.success(message: 'E-Card download started');
} catch (e) {
return DownloadResult.failure('Could not download file');
}
}
}