Буфер обмена изображения во Flutter

как я могу скопировать (буфер обмена) изображение во Flutter? С текстами я могу, но с изображением я нашел эти сомнения только в Github Flutter, но без решения.

В тексте я использую с Clipboard.setData(new ClipboardData(text: widget.content)); и работаю.

Но как скопировать изображение?

попробуйте это: stackoverflow.com/a/30661133/156869

ariefbayu 24.12.2020 02:17
4
1
3 081
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Как прокомментировал @ariefbayu, копирование файлов в буфер обмена широко не поддерживается, однако, как правило, некоторые приложения следуют правилу копирования пути к файлу в буфер обмена, чтобы получить к нему доступ.

Для этого наш код мог бы выглядеть так:


Future<String> get _localPath async {
  final directory = await getApplicationDocumentsDirectory();
  return directory.path;
}

Future<void> _copyFile() async {
   final path = await _localPath;
   Clipboard.setData(new ClipboardData(text: "content://${_localPath}/image.png"));
   return;
}

хорошо, но если я попытаюсь вставить буфер обмена в Instagram Direct, например, он вставит путь к изображению, а не изображение. Пример: content:///data/user/0/me.fabio.app/cache/file_picker/ab21d5‌​b71ba7b3b74947c3e565‌​6c6aee.jpg

Fabio 24.12.2020 04:02

целевое приложение также должно понимать схему вашего буфера обмена. Я не думаю, что Instagram это понял.

ariefbayu 24.12.2020 06:39

Как сказал @ariefbayu, это ожидаемое поведение. Если вы хотите использовать изображение в Instagram, будет ли функция обмена жизнеспособным вариантом?

Stefano Amorelli 24.12.2020 13:20

Вставка изображения не поддерживается буфером обмена флаттера. Вы можете получить доступ к буферу обмена в Интернете, как это.

  addPasteListener(ClipboardCallback callback) {
    document.removeEventListener('paste', pasteAuto, false);
    _singleton._callback = callback;
    document.addEventListener('paste', pasteAuto, false);
  }

  pasteAuto(Event ee) async {
    ClipboardEvent e = ee;
    if (e.clipboardData != null) {
      var items = e.clipboardData.items;
      if (items == null) return;

      //access data directly
      var blob;
      for (var i = 0; i < items.length; i++) {
        if (items[i].type.indexOf("image") != -1) {
          blob = items[i].getAsFile();
          break;
        }
      }
      if (blob != null) {
        _singleton._callback(blob);
        e.preventDefault();
      }
    }
  }

Я нашел решение для сети. На андроиде не проверял, но может тоже работает?

document.onPaste.listen((ClipboardEvent e) {
  File? blob = e.clipboardData?.items?[0].getAsFile();
});

Блоб — это ваш файл изображения.

Другие вопросы по теме