我来问一个关于Flutter和Future以及等待机制的一个特定问题,这似乎有效,但我的剪贴板在使用我的可编辑文本字段时并没有真正起作用,甚至遵循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);
}
}
我可能正在使用期货和异步等待错误,会喜欢一些指导!!!复制正在使用剪贴板管理器插件!非常感谢!
或者您可以使用Flutter的基本方式:
ClipboardData data = await Clipboard.getData('text/plain');
这就像魅力一样。
它对我有用:
_getFromClipboard() async {
Map<String, dynamic> result =
await SystemChannels.platform.invokeMethod('Clipboard.getData');
if (result != null) {
return result['text'].toString();
}
return '';
}
如果要从系统剪贴板中侦听定期更新,也会很有用。 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();
}