import 'dart:async'; import 'package:flutter/services.dart'; class Download { static Future downloadUrl({ required String url, Map? headers, String? mimeType, required String filename, bool? shouldNotify, }) async { return (await _channel.invokeMethod("downloadUrl", { "url": url, "headers": headers, "mimeType": mimeType, "filename": filename, "shouldNotify": shouldNotify, }))!; } /// The download job has failed static const exceptionCodeDownloadError = "downloadError"; static const _channel = MethodChannel("com.nkming.nc_photos/download"); } class DownloadEvent { static StreamSubscription listenDownloadComplete() => _stream.listen(null); /// User canceled the download job static const exceptionCodeUserCanceled = "userCanceled"; static const _downloadCompleteChannel = EventChannel( "com.nkming.nc_photos/download_event/action_download_complete"); static late final _stream = _downloadCompleteChannel .receiveBroadcastStream() .map((data) => DownloadCompleteEvent( data["downloadId"], data["uri"], )); } class DownloadCompleteEvent { const DownloadCompleteEvent(this.downloadId, this.uri); final int downloadId; final String uri; }