Flutter无法从剪贴板中读取

时间:2018-11-20 12:10:11

标签: asynchronous dart flutter clipboard future

我来问一个关于Flutter和Future and await机制的相当具体的问题,该问题似乎正在起作用,但是即使遵循Google关于实现的建议,我的剪贴板在使用可编辑的文本字段时也无法真正起作用...

这是我粘贴的代码:

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

我的粘贴功能不起作用...在调试此以下功能的结果为null时,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);
    }
  }

我可能正在使用期货,并且异步等待错误,希望获得一些指导!!!正在使用剪贴板管理器插件进行复制!非常感谢!

4 个答案:

答案 0 :(得分:1)

或者您也可以使用Flutter的基本方法:

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

这就像魅力。

答案 1 :(得分:0)

对我有用:

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

答案 2 :(得分:0)

如果您想听系统剪贴板中的定期更新,也很有用。 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();
}

答案 3 :(得分:0)

首先创建一个方法

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());
                },
              ),