【Flutter 问题系列第 64 篇】解决剪贴板复制的有内容,但却提示 ClipboardData 为 null 的问题

这是【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 博客中,希望自己学习的同时,也可以帮助更多的人。

猜你喜欢

转载自blog.csdn.net/qq_42351033/article/details/124979126
今日推荐