как я могу скопировать (буфер обмена) изображение во Flutter? С текстами я могу, но с изображением я нашел эти сомнения только в Github Flutter, но без решения.
В тексте я использую с Clipboard.setData(new ClipboardData(text: widget.content));
и работаю.
Но как скопировать изображение?
Как прокомментировал @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/ab21d5b71ba7b3b74947c3e5656c6aee.jpg
целевое приложение также должно понимать схему вашего буфера обмена. Я не думаю, что Instagram это понял.
Как сказал @ariefbayu, это ожидаемое поведение. Если вы хотите использовать изображение в Instagram, будет ли функция обмена жизнеспособным вариантом?
Вставка изображения не поддерживается буфером обмена флаттера. Вы можете получить доступ к буферу обмена в Интернете, как это.
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();
});
Блоб — это ваш файл изображения.
попробуйте это: stackoverflow.com/a/30661133/156869