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

Replay音频转换时samplerate缺失的解决方案指南

Replay音频转换时提示"No module named 'samplerate' This error is lazily reported, having originally occured in File"的解决方案

weixin_47445543的博客 2130

告别降级CUDA!手把手教你为RTX 50系显卡(5080/5090)配置专属的PyTorch Nightly + vLLM推理环境

本文详细指导如何为RTX 50系显卡(5080/5090)配置专属的PyTorch Nightly和vLLM推理环境,特别针对CUDA 12.8的适配问题提供解决方案。从硬件准备到源码编译,再到模型部署与性能调优,手把手教你构建高效AI推理系统。

weixin_33724046的博客 408

UG NX二次开发(C++)-UIStyler-指定平面的对象和参数获取

在采用NXOpen C++进行二次开发时,采用Menu/UIStyler是一种很常见的方式,这样可以制作精美的界面,而且常用的块对象也集成了快速编程的代码,我们可以快速的利用这些块来定制我们需要的界面。但是,对于很多初学者可能对选择对象的获取不是很熟悉,我们本文以选择“指定平面”来讲一下如何获取选择的对象和对象的参数。另外,由于我们的UG NX二次开发学习讨论群QQ一群已满,有希望参与学习的有志之士加入我们的QQ二群:683566590。

GimiGimmy 1091

汽车电子RTOS--AUTOSAR OS

AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR(汽车开放系统架构)标准中的一个重要组件,它是一个专门为汽车电子控制单元(ECU)设计的实时操作系统(RTOS)。AUTOSAR OS旨在提供一个标准化的软件平台,以促进不同供应商和汽车制造商之间的组件复用和协同开发,提高软件质量和降低成本。

MHD0815的博客 1798

【即插即用模块】注意力篇 | TGRS 2025 | SCPP:独家复现!三特征多尺度注意力融合,涨点必备!

摘要:SCPP(Scale-aware Pyramid Pooling)是一种创新的多尺度特征融合模块,专为U型网络瓶颈设计。它通过局部特征提取(1×1卷积)、多尺度膨胀卷积(1/3/5膨胀率分支)和全局特征聚合(全局平均池化)三重结构,结合SE通道注意力机制和自适应加权融合,显著提升特征表达能力。实验表明,SCPP能有效解决边缘模糊和错误检测问题,在遥感图像分割等任务中表现优异。该模块支持即插即用,适用于各类需要多尺度特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 944

【PCIe 总线及设备入门学习专栏 3.2.2 -- PCIe 中什么是 SR-IOV】

SR-IOV(Single Root I/O Virtualization)是 PCIe 规范中的一种技术,允许物理 PCIe 设备(称为 Physical Function, PF)虚拟化为多个虚拟设备(称为 Virtual Functions, VFs),使多个操作系统或虚拟机能够共享同一个物理设备。SR-IOV:一种 PCIe 虚拟化技术,允许将一个物理 PCIe 设备虚拟化为多个虚拟设备。:物理设备的主要管理接口。:PF 的轻量级副本,分配给虚拟机或操作系统。

CodingCos的博客 1513

把 SAP OData 查询模式讲透:从 $select 到 $expand 的设计、实现与性能边界

摘要:本文深入探讨SAP生态中OData查询模式的核心设计与实现要点。文章指出,OData不仅是接口协议,更是HTTP、REST与数据模型的统一语言,其性能关键取决于查询选项($select、$filter等)的设计与实现质量。重点分析了$select的投影优化、$orderby的排序语义、$filter的数据库下推策略,以及$count的高效计数方法。通过具体示例和最佳实践,强调应将查询逻辑尽量下推至数据库层,避免在ABAP应用层处理大数据集,从而提升服务性能、降低资源消耗,实现Clean Core架构理

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 649

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 为什么在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、付费专栏及课程。

余额充值