我来问一个关于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);
}
}
我可能正在使用期货,并且异步等待错误,希望获得一些指导!!!正在使用剪贴板管理器插件进行复制!非常感谢!
答案 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());
},
),