如何在TextField Flutter中接受图像

bqucvtff  于 2023-03-24  发布在  Flutter
关注(0)|答案(4)|浏览(155)

bounty将在2天后过期。回答此问题可获得+50声望奖励。letsintegreat希望引起更多人关注此问题。

在Android,当我们采取截图,它被存储在剪贴板.现在,如果我打开WhatsApp,并点击消息字段.我的键盘给我一个建议,从剪贴板粘贴图像,如下所示.

我猜这是因为TextField以某种方式告诉操作系统它可以接受图像。我如何在 Flutter 的TextField中实现相同的行为?如果不是TextField,是否有任何方法可以实现一个按钮,可以将图像从剪贴板粘贴到我们的应用程序中?
我发现了一个其他平台的pub软件包-https://pub.dev/packages/pasteboard,但它似乎不支持android。

wrrgggsh

wrrgggsh1#

你可以使用这个软件包,它支持所有的平台super_clipboard,然后通过添加一个图标按钮来定制这个过程。
遵循安装步骤,因为插件在内部使用Rust来实现底层平台特定的功能

1mrurvl1

1mrurvl12#

在Flutter中,您可以使用FlutterClipboard包与系统剪贴板交互。

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_clipboard_manager/flutter_clipboard_manager.dart';

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
  

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: AppBar(
        title: Text("My Widget"),
      ),
      body: Column(
        children: [
          TextField(
            decoration: InputDecoration(
              hintText: "Paste the screenshot here",
            ),
            keyboardType: TextInputType.multiline,
            maxLines: null,
            onTap: () async {
              var clipboardData = await Clipboard.getData(Clipboard.kTextPlain);
              if (clipboardData != null && clipboardData.text != null) {
                setState(() {
                  _textEditingController.text = clipboardData.text;
                });
              }
            },
          ),
        ],
      ),
    );
  }
}
fwzugrvs

fwzugrvs3#

将文件复制到剪贴板不受广泛支持;然而作为一般标准,一些应用遵循将文件的路径复制到剪贴板以便访问它的规则。
你可以做这样的事情。

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;
}

这些都是我在做这个回答时使用的资源。它对你会很有用。
在Flutter中剪贴图像
如何将图像/文件复制到Android中的剪贴板?任何替代方法/步骤来获得此
如果你真的有兴趣解决这个问题,你可以写在本地功能和使用flutter与platform channel

sdnqo3pr

sdnqo3pr4#

非常好的问题,在扑动的边缘
为了使该功能切换到 Flutter 主信道(命令flutter channel master),现在将包括添加该功能的PR 110052
要使用它,只需将其添加到TextField:

//...
  contentInsertionConfiguration: ContentInsertionConfiguration(
    onContentInserted : (_){/*your cb here*/}
    allowedMimeTypes: ["image/png",/*...*/],
  }),
//...

然后,这将使用Android特定的content commit api(如您所猜)告诉操作系统,您的TextField接受给定的mimetype;gboard将识别这一点,并建议在您的剪贴板与拟合mimetypes的内容

相关问题