Flutter 无法从剪贴板读取

Posted

技术标签:

【中文标题】Flutter 无法从剪贴板读取【英文标题】:Flutter can't read from Clipboard 【发布时间】:2019-04-22 21:08:30 【问题描述】:

我来询问有关 Flutter 和 Future 和 await 机制的一个非常具体的问题,这似乎正在工作,但我的剪贴板在使用我的可编辑文本字段操作时并没有真正起作用,即使遵循 Google 的实施建议......

这是我的粘贴代码:

onPressed: () async 
  await getMyData('text');
  _encodingController.text = clipData;
  Scaffold.of(context).showSnackBar(
    new SnackBar(
      content: new Text(
        "Pasted from Clipboard"),
      ),
    );
,

我的粘贴功能不起作用...在调试以下函数的结果为空时,wth?????????

static Future<ClipboardData> getMyData(String format) async 
    final Map<String, dynamic> result =
        await SystemChannels.platform.invokeMethod(
      'Clipboard.getData',
      format,
    );

    if (result == null) 
      return null;
     else 
      clipData = ClipboardData(text: result['text']).text;
      return ClipboardData(text: result['text'].text);
    
  

我可能正在使用 Futures 和 async await 错误,希望得到一些指导!!!正在使用剪贴板管理器插件进行复制!非常感谢!

【问题讨论】:

【参考方案1】:

这对我有用:

  _getFromClipboard() async 
    Map<String, dynamic> result =
        await SystemChannels.platform.invokeMethod('Clipboard.getData');
    if (result != null) 
      return result['text'].toString();
    
    return '';
  

【讨论】:

【参考方案2】:

您可以简单地将 Flutter 现有的库代码重新使用到剪贴板中的getData

ClipboardData data = await Clipboard.getData('text/plain');

【讨论】:

【参考方案3】:

如果您想监听来自系统剪贴板的定期更新,这也很有用。 Originally I replied here,只是重新发布解决方案:

#creating a listening Stream:
final clipboardContentStream = StreamController<String>.broadcast();

#creating a timer for updates:
Timer clipboardTriggerTime;

clipboardTriggerTime = Timer.periodic(
# you can specify any duration you want, roughly every 20 read from the system
      const Duration(seconds: 5),
      (timer) 
        Clipboard.getData('text/plain').then((clipboarContent) 
          print('Clipboard content $clipboarContent.text');

          # post to a Stream you're subscribed to
          clipboardContentStream.add(clipboarContent.text);
        );
      ,
    );

# subscribe your view with
Stream get clipboardText => clipboardController.stream

# and don't forget to clean up on your widget
@override
void dispose() 
  clipboardContentStream.close();

  clipboardTriggerTime.cancel();

【讨论】:

【参考方案4】:

首先创建一个方法

Future<String> getClipBoardData() async 
        ClipboardData data = await Clipboard.getData(Clipboard.kTextPlain);
        return data.text;
      

然后在构建方法中

FutureBuilder(
                future: getClipBoardData(),
                initialData: 'nothing',
                builder: (context, snapShot)
                  return Text(snapShot.data.toString());
                ,
              ),

【讨论】:

以上是关于Flutter 无法从剪贴板读取的主要内容,如果未能解决你的问题,请参考以下文章

R data.table 从剪贴板读取

Pandas 从剪贴板读取带有日期时间列的 DataFrame

如何在 Flutter 上创建复制到剪贴板事件?

网页是如何实现从剪贴板从读取图片并上传到server的

Flutter(Dart)如何在点击应用程序时将副本添加到剪贴板?

如何在跨浏览器中读取剪贴板数据?