pickFiles method

Future<List> pickFiles(
  1. bool multiple,
  2. List<String> mime
)

Implementation

Future<List<dynamic>> pickFiles(bool multiple, List<String> mime) {
  final completer = Completer<List<dynamic>>();
  final picker = web.HTMLInputElement();
  final isSafari =
      web.window.navigator.userAgent.toLowerCase().contains('safari');
  if (isSafari) web.document.body!.append(picker);
  picker.multiple = multiple;
  if (mime.isNotEmpty) picker.accept = mime.join(',');

  void onChangeHandler() {
    if (picker.files != null) {
      final list = List.generate(
          picker.files!.length, (index) => picker.files!.item(index));
      completer.complete(list);
    } else
      completer.complete([]);
    if (isSafari) picker.remove();
  }

  void onCancelHandler() {
    completer.complete([]);
    if (isSafari) picker.remove();
  }

  picker.onchange = onChangeHandler.toJS;
  picker.oncancel = onCancelHandler.toJS;
  picker.click();
  return completer.future;
}