pickMultipleMedia method
Future<List<String> ?>
pickMultipleMedia(
- MediaSource source,
- MediaType type,
- MediaOptions options
override
Implementation
@override
Future<List<String>?> pickMultipleMedia(
MediaSource source, MediaType type, MediaOptions options) async {
if (source == MediaSource.camera) {
throw Exception(
'Multiple media capture from camera not supported on web');
}
final completer = Completer<List<String>?>();
final input = web.document.createElement('input') as web.HTMLInputElement;
input.type = 'file';
input.multiple = true;
input.style.display = 'none';
switch (type) {
case MediaType.image:
input.accept = 'image/*';
break;
case MediaType.video:
input.accept = 'video/*';
break;
default:
input.accept = '*/*';
}
input.addEventListener(
'change',
(event) async {
final files = input.files;
if (files != null && files.length > 0) {
final results = <String>[];
for (var i = 0; i < files.length; i++) {
final file = files.item(i);
if (file == null) continue;
if (type == MediaType.image) {
final result = await _processImageFile(file, options);
if (result != null) results.add(result);
} else if (type == MediaType.video) {
final url = await _processVideoFileWithWatermark(file, options);
if (url != null) results.add(url);
}
}
completer.complete(results);
} else {
completer.complete(null);
}
} as web.EventListener);
if (web.document.body != null) {
web.document.body!.appendChild(input);
}
input.click();
input.remove();
return completer.future;
}