Flutter Web - Как выбрать файл PDF и POST для API? - PullRequest
0 голосов
/ 29 января 2020

Я создаю веб-приложение Flutter, часть которого пользователь может выбрать на своем компьютере один или несколько файлов PDF. Этот PDF-файл будет отправлен в API. Есть ли способ сделать это на Flutter Web?

1 Ответ

0 голосов
/ 16 марта 2020

С учетом этого решения я подготовил вспомогательный класс для упрощения выбора документов на веб-сайте:

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 для выбранных файлов.

...