news 2026/4/15 23:49:28

Flutter 实现一个容器内部元素可平移、缩放和旋转等功能(十一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter 实现一个容器内部元素可平移、缩放和旋转等功能(十一)

Flutter 实现一个容器内部元素可平移、缩放和旋转等功能(十一)

Flutter: 3.35.7

前面我们实现了网格辅助线等功能,拥有这些功能,我们就能很好的定位元素在容器内的位置。今天我们就主要实现元素层级的相关操作。

在我们之前的功能中,元素个数比较少,当元素个数达到一定数量后,肯定会存在覆盖的情况,我们无法保证需要操作的元素一定是在顶层,所以就需要对层级进行辅助控制。而且层级操作主要是针对当前选中的元素,所以在未选中元素的时候就不允许点击。

元素层级的控制主要分为如下几类:

  1. 操作当前选中元素的层级
  2. 选中点击坐标内的某个层级的元素,不至于一定要保证它在顶层也可选中进行操作

因为元素层级的操作涉及到几个,以开启按钮位置为基准定位展示,所以要使用到OverlayEntry,我们单独抽取结构:

import'package:flutter/material.dart';import'base_icon_button.dart';classLevelBarextendsStatefulWidget{constLevelBar({super.key,requiredthis.onChangeUsePosition,requiredthis.usePosition,requiredthis.disabled,});finalFunction()onChangeUsePosition;finalbool usePosition;finalbool disabled;@overrideState<LevelBar>createState()=>_LevelBarState();}class_LevelBarStateextendsState<LevelBar>{/// 用于获取定位信息finalGlobalKey_globalKey=GlobalKey();/// 容器OverlayEntry?_overlayEntry;/// 宽高定位信息用于定位容器double _barWidth=0;double _barHeight=0;double _barTop=0;double _barLeft=0;@overridevoiddidUpdateWidget(covariantLevelBaroldWidget){super.didUpdateWidget(oldWidget);// 当使用层级工具,展示,不使用,隐藏if(oldWidget.usePosition!=widget.usePosition){if(widget.usePosition==false){_hideLevelBar();}else{WidgetsBinding.instance.addPostFrameCallback((_){_showLevelBar();});}}}@overridevoiddispose(){_globalKey.currentState?.dispose();_hideLevelBar();super.dispose();}/// 隐藏层级工具栏void_hideLevelBar(){if(_overlayEntry!=null){_overlayEntry?.remove();_overlayEntry=null;}}/// 展示层级工具栏void_showLevelBar(){_getDimensions();_hideLevelBar();// 创建 OverlayEntry_overlayEntry=OverlayEntry(builder:(context)=>Positioned(top:_barHeight+_barTop,left:_barLeft-100+_barWidth/2,child:Material(borderRadius:BorderRadius.circular(10),child:Container(width:200,decoration:BoxDecoration(color:Color(0xFFF0F0F0),border:Border.all(color:Colors.blueAccent,width:2,),borderRadius:BorderRadius.circular(10),),child:Row(mainAxisAlignment:MainAxisAlignment.center,children:[BaseIconButton(iconSrc:'assets/images/icon_top.png',onPressed:(){},),BaseIconButton(iconSrc
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 0:59:36

利用VDMA提升Zynq视觉系统吞吐量的实践分析

以下是对您提供的博文《利用VDMA提升Zynq视觉系统吞吐量的实践分析》进行 深度润色与重构后的专业级技术文章 。全文严格遵循您的所有要求: ✅ 彻底去除AI痕迹,语言自然、真实,如一位有十年Zynq实战经验的嵌入式视觉系统架构师在和你面对面交流; ✅ 所有模块有机融合,…

作者头像 李华
网站建设 2026/4/15 23:07:31

开源密码管理器KeyPass:本地优先的数据自治方案

开源密码管理器KeyPass&#xff1a;本地优先的数据自治方案 【免费下载链接】KeyPass KeyPass: Open-source & offline password manager. Store, manage, take control securely. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyPass 在数字时代&#xff0c;密码…

作者头像 李华
网站建设 2026/4/15 14:54:06

MinerU图文分离实战:图片与公式独立导出方法详解

MinerU图文分离实战&#xff1a;图片与公式独立导出方法详解 在处理学术论文、技术文档或工程报告类 PDF 时&#xff0c;你是否遇到过这样的困扰&#xff1a;复制粘贴文字后公式变成乱码、图片丢失、表格错位、多栏排版全乱套&#xff1f;更糟的是&#xff0c;手动一张张截图、…

作者头像 李华
网站建设 2026/4/9 3:33:06

探索Windows安卓兼容方案:APK Installer完全指南

探索Windows安卓兼容方案&#xff1a;APK Installer完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字化工作流中&#xff0c;我们经常面临一个挑战&#…

作者头像 李华
网站建设 2026/4/15 17:48:15

破解Chartero兼容性秘密:Zotero 7到8的无缝过渡技术指南

破解Chartero兼容性秘密&#xff1a;Zotero 7到8的无缝过渡技术指南 【免费下载链接】Chartero Chart in Zotero 项目地址: https://gitcode.com/gh_mirrors/ch/Chartero 问题识别&#xff1a;版本跃迁中的三大技术迷局 &#x1f50d; API接口迷宫&#xff1a;从方法名…

作者头像 李华
网站建设 2026/4/12 22:36:05

从上传到下载,CV-UNet抠图全流程实测,效率提升10倍

从上传到下载&#xff0c;CV-UNet抠图全流程实测&#xff0c;效率提升10倍 1. 这不是PS&#xff0c;但比PS更懂你&#xff1a;一个能自己“看懂”人像边界的AI工具 你有没有过这样的经历&#xff1a; 花20分钟在Photoshop里用钢笔工具抠一张头发丝飘动的人像&#xff0c;放大…

作者头像 李华