Flutter学习 ---- 屏幕截图和高斯模糊

Flutter 实现背景高斯模糊并拦截手势 Flutter 实现背景高斯模糊并拦截手势 在flutter中可以通过一个Widget直接实现背景模糊效果:BackdropFilter 源码介绍如下(例子被我省略了,大家可以直接查看源码的时候去看一下): /// A widget that applies a filter to the existing painted content and then /// paints [child]. ... 阅读详情

废话不多说,先上本次要实现的效果图。
效果

Gif格式是渣像素,实际效果要自然的多。这个项目其实是看到小池记账小程序后实现的一个类似效果,小池比较闪光的一点就是这个主界面的动态高斯模糊效果,不过小池的动态模糊效果就不如Flutter可以做的这么自然流畅了,模糊时还是有肉眼可见的卡顿的。大家可以搜索小池记账对比一下,下面进入正文。

知识点

  1. Flutter中如何截取当前屏幕的Widget图片。
  2. Flutter如何对一张图片进行高斯模糊。
  3. 如何淡入淡出切换两个Widget。

Flutter截取当前屏幕的Widget图片

  1. 目前官网文档还没有相关的例子,正式发布的Beta3版本也没有公开的方法,但事实上,在未公开发布的Flutter v0.4.4中,已经有截取当前屏幕Widget图片的文档了,地址在这里。我们需要切换到当前的开发分支才能看到这个新的方法toImage()。你可以直接在Flutter的本地git仓库checkout到master分支,当然,也可以用下面更简单的方法,运行这两个命令,Flutter会自动切换到最新分支并下载依赖,到这里,准备工作就算完成了。
flutter channel master
flutter doctor -v
  1. 给需要截图的Widget包裹一个RepaintBoundary,如下示例代码:
class _PngHomeState extends State<PngHome> {
   
   
  GlobalKey globalKey = new GlobalKey();

  // 截图boundary,并且返回图片的二进制数据。
  Future<Uint8List> _capturePng() async {
    RenderRepaintBoundary boundary = globalKey.currentContext.findRenderObject();
    ui.Image image = await boundary.toImage();
    // 注意:png是压缩后格式,如果需要图片的原始像素数据,请使用rawRgba
    ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);
    Uint8List pngBytes = byteData.buffer.asUint8List();
    return pngBytes;
  }

  @override
  Widget build(BuildContext context) {
    return RepaintBoundary(
      //globalKey用于识别
      key: globalKey,
      child: Center(
        child: FlatButton(
          child: Text('Hello World', textDirection: TextDirection.ltr),
          onPressed: _capturePng,
        ),
      ),
    );
  }

目前这个方法还是挺费时间的,大概在100ms左右才能得到截图,更别说我们还要对图片做处理,所以,尽管我对生成的图片做了缓存,但是第一次得到图片的时候,还是会有一小会的停顿(200-300ms)

对得到的图片进行高斯模糊

拿到了图片的二进制数据,怎么对其进行高斯模糊?搜索官网发现了一个很好的库:image,把它添加到项目中来,在pubspec.yaml中添加如下代码:

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.0
  image: "^1.1.32"

然后在项目中import,注意取一个别名,不要跟Flutter已有的Image库冲突:

impor
安卓自动化新思路:不用Appium!YOLO+ADB实现精准点击(避坑指南) 本文介绍了一种创新的安卓自动化方案,通过结合YOLO目标检测和ADB命令实现精准点击,特别适用于游戏界面、动态内容等传统工具难以处理的场景。该方案不依赖控件层级信息,能像人类一样识别屏幕内容,实测点击准确率比XPath定位高37%,响应速度快2.8倍。文章详细讲解了环境配置、模型训练、工程实现及性能优化技巧,为移动端自动化提供了新思路。 阅读详情

相关推荐

Large Action Models(LAM)实战指南:让大模型真正动手干活

Large Action Models(LAM)代表了AI从语言理解迈向物理/数字世界执行的关键范式跃迁——它不再满足于生成文本,而是将动作建模为可预测、可生成、可验证的token序列。其核心原理在于将GUI交互、多步骤状态依赖任务转化为序列生成问题,依托多模态上下文(截图+OCR+可访问性树)实现像素级动作定位。技术价值体现在工程可控性:通过四阶段训练(Task-Plan预训练→专家示范→自我探索→奖励模型微调),显著提升任务成功率(TSR)与步骤鲁棒性(SSR)。典型应用场景覆盖办公自动化(Excel筛

vanadiumlin 550

Flutter实现动态高斯模糊

一个App加上高斯模糊会形成一种高级的感觉,本文将介绍如何制作一个根据背景内容来动态高斯模糊,效果如下动态高斯模糊AppBar本质上是一个,我们不直接通过的属性来设置,而是将我们需要的放在属性里面,至于为什么不能放在属性里面呢,最主要的原因是,的属性是顶级组件,在以外的任何组件都无法覆盖或置于其下,而我们的主要实现思路是通过组件的堆叠以及的位置设置来实现此效果 创建自定义嵌套导航路由 App结构构建 为了使代码更好的管理和维护,我们对页面使用三层架构模式,即分为`state`、`logic`、`view`

qianxiamuxin的博客 1046

Flutter实现动态高斯模糊效果的AppBar

本文还有配套的精品资源,点击获取 简介:本文详细介绍了如何利用Flutter框架构建一个具有动态高斯模糊效果的AppBar。这种AppBar能够在用户滚动页面时改变其背景模糊程度,增强视觉吸引力。我们将通过自定义AppBar类、使用 BackdropFilter 和 BoxShadow ,以及监听滚动事件等步骤来实现这一效果,并讨论了性能优化的可...

weixin_26805451的博客 1610

flutter_screenshot_callback:Flutter插件,可让您检测移动屏幕截图并在iOS和Android上执行回调函数。 :rocket:

屏幕截图回调 Flutter插件,可让您检测移动屏幕截图并在iOS和Android上执行回调函数。 :rocket: ••• ! 用法 导入包裹 要使用此插件,请按照。 使用插件 将以下导入添加到您的Dart代码中: import 'package:screenshot_callback/screenshot_callback.dart' ; 使用所需的范围初始化ScreenshotCallback: ScreenshotCallback screenshotCallback = ScreenshotCallback (); addListener 然后调用ScreenshotCallback addListener方法。 添加检测屏幕截图后要执行的自定义功能。 例如: screenshotCallback. addListener (() { //Void funtions are

3D Slicer中文教程(三)—数据加载及保存方式

1.打开数据与保存数据 (1)打开数据 ——可以将数据拖拽到3D Slicer应用窗口或者从菜单栏工具栏打开。 ——多种方式加载大量数据。 有关DICOM数据,请参阅DICOM模块文档。 对于几乎所有其他(包括场景),您可以使用添加数据对话框。 有关支持的数据格式的列表,请参阅此列表。 请注意,仅部分支持列出的某些格式。 ——对于一些更复杂的格式(特别是DWI),建议首先使用DICOM到n...

weixin_33676492的博客 5535

挑战第七天:Llamaindex RAG 实践

安装python 依赖包,并安装 Llamaindex和相关包以及Sentence Transformer 模型。进入开发机后,创建新的conda环境,命名为。镜像,然后在资源配置中,使用。的选项,然后立即创建开发机器。后,点击 选择镜像 使用。然后安装相关基础依赖。

weixin_53579823的博客 728

华为2019秋招笔试Java实现(2)

华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下

hewhys的博客 1549

从零开始:手把手教你设计DP接口电路(含原理图实战)

本文是一份详尽的DisplayPort接口电路设计实战指南。文章从DP接口的核心架构与HDMI的差异讲起,手把手解析了高速差分对、AUX辅助通道、热插拔检测等关键模块的原理图设计要点,并提供了一个完整的DP Source端原理图实例,最后总结了PCB布局与信号完整性的核心考量,旨在帮助硬件工程师高效、稳定地完成DP接口电路设计。

transformer2023的博客 734

Vivado 2018.3 安装步骤及 license 获取

本文的主要内容是介绍 Vivado 2018.3 版本的安装步骤及其 license 的获取与加载。

西岸贤 4万+

【声纳技术】声呐时间反转镜技术:从被动聚焦到主动空间复用

时间反转镜技术以其独特的物理机制,为水声通信与声呐探测提供了一条绕过传统自适应均衡器的新路径。被动时间反转利用接收端的空间分集实现脉冲压缩,结构简洁、计算高效;主动时间反转则通过发射端预编码,将多径能量引导至目标位置,为多用户下行链路的空间复用奠定了物理基础。从Kuperman等人在海洋中首次验证声学时间反转镜,到TR-MIMO声呐的湖试验证,再到VTRM-CRK多用户通信系统的海试成功,该技术已从理论概念逐步走向工程实用。

u012133341的博客 55

ADS基础教程22 - 有限元电磁仿真(FEM)

一、引言二、FEM操作过程1.新建Layout1.新建Layout2.EM设置3.设置Frequency plan4.设置Output plan5.设置Options6.设置网格频率7.仿真结果三、总结介绍了在ADS中如何进行FEM仿真过程。END!}}END!

XZ_ZC的博客 2580

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 为什么在Go语言中要少用interface{}
下一篇: Flutter学习 ---- TravisCI加持
csdnYF
博客等级 码龄12年 406粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值