这是【Flutter 问题系列第 64 篇】,如果觉得有用的话,欢迎关注专栏。
一:问题描述
搞了一个类似淘口令的功能,功能比较简单,伪代码如下所示
/// 监测生命周期的变化
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print("生命周期状态:$state");
if (state == AppLifecycleState.resumed) {
getClipboardContents();
}
super.didChangeAppLifecycleState(state);
}
/// 使用异步调用获取系统剪贴板的返回值
getClipboardContents() async {
// 访问剪贴板的内容。
ClipboardData? clipboardData = await Clipboard.getData(Clipboard.kTextPlain);
print("获取到的剪贴板内容:$clipboardData");
}
但遇到了一个小问题,我在手机上已经复制了一段文字,然后切回到 App ,此时生命周期已经监测到状态为 resumed
,然后去获取剪贴板上的内容时,却一直提示 ClipboardData 为 null。
如下图所示
二:解决方案
在 github 上有人也遇到了同样的问题,点击 链接跳转 查看原文。
其实就是在异步调用获取系统剪贴板的内容前,加了一个延时操作,修改后就可以正常获取剪贴板上的内容了。
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print("生命周期状态:$state");
// 当App生命周期状态为恢复时。
if (state == AppLifecycleState.resumed) {
// 修改前
// getClipboardContents();
// 修改后
Future.delayed(Duration(milliseconds: 100)).then((value) => getClipboardContents());
}
super.didChangeAppLifecycleState(state);
}
你的问题得到解决了吗?欢迎在评论区留言。
赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。
结束语 Google 的 Flutter 越来越火,截止 2022年5月26日 GitHub 标星已达 141K,Flutter 毅然是一种趋势,所以作为前端开发者,没有理由不趁早去学习。 无论你是 Flutter 新手还是已经入门了,不妨先点个关注,后续我会将 Flutter 中的常用组件(含有源码分析、组件的用法及注意事项)以及可能遇到的问题写到 CSDN 博客中,希望自己学习的同时,也可以帮助更多的人。