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 无法从剪贴板读取的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 从剪贴板读取带有日期时间列的 DataFrame