С учетом этого решения я подготовил вспомогательный класс для упрощения выбора документов на веб-сайте:
import 'dart:async';
import 'package:universal_html/prefer_universal/html.dart';
class DocumentPicker
{
static Future<List<dynamic>> open({ List<String> types, bool multiple = false}) async {
final completer = Completer<List<String>>();
InputElement uploadInput = FileUploadInputElement();
if(types != null && types.length > 0){
String theTypes = types.join(',');
uploadInput.accept = theTypes;
}
uploadInput.multiple = multiple;
uploadInput.click();
uploadInput.addEventListener('change', (e) async {
final files = uploadInput.files;
Iterable<Future<String>> resultsFutures = files.map((file) {
final reader = FileReader();
reader.readAsDataUrl(file);
reader.onError.listen((error) => completer.completeError(error));
return reader.onLoad.first.then((_) => reader.result as String);
});
final results = await Future.wait(resultsFutures);
completer.complete(results);
});
document.body.append(uploadInput);
return completer.future;
}
}
Пример:
if(kIsWeb) {
DocumentPicker.open(types: ['application/pdf']).then((list) {
processList(list);
});
return;
}
Будет возвращен список строки в кодировке base64 для выбранных файлов.