news 2026/10/16 14:14:12

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/10/11 10:01:21

三步打造你的专属密码堡垒:开源密码管理器全攻略

三步打造你的专属密码堡垒&#xff1a;开源密码管理器全攻略 【免费下载链接】KeyPass KeyPass: Open-source & offline password manager. Store, manage, take control securely. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyPass KeyPass是一款完全离线的开…

作者头像 李华
网站建设 2026/10/15 7:50:03

openLCA零门槛部署指南:从环境准备到高效配置的完整路径

openLCA零门槛部署指南&#xff1a;从环境准备到高效配置的完整路径 【免费下载链接】olca-app Source code of openLCA 项目地址: https://gitcode.com/gh_mirrors/ol/olca-app openLCA是一款开源的生命周期评估&#xff08;LCA&#xff09;工具&#xff0c;专为产品环…

作者头像 李华
网站建设 2026/10/11 2:05:56

实战探索:基于go-cqhttp构建高效QQ机器人的技术路径与创新实践

实战探索&#xff1a;基于go-cqhttp构建高效QQ机器人的技术路径与创新实践 【免费下载链接】go-cqhttp cqhttp的golang实现&#xff0c;轻量、原生跨平台. 项目地址: https://gitcode.com/gh_mirrors/go/go-cqhttp &#x1f914; 问题引入&#xff1a;现代QQ机器人开发的…

作者头像 李华
网站建设 2026/10/12 3:18:36

本地密码管理与数据自主掌控:KeyPass开源密码管理器完全指南

本地密码管理与数据自主掌控&#xff1a;KeyPass开源密码管理器完全指南 【免费下载链接】KeyPass KeyPass: Open-source & offline password manager. Store, manage, take control securely. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyPass 在数字化时代&a…

作者头像 李华
网站建设 2026/10/13 19:35:03

3步解锁智能字幕工具全流程:多语言翻译引擎助力视频本地化

3步解锁智能字幕工具全流程&#xff1a;多语言翻译引擎助力视频本地化 【免费下载链接】video-subtitle-master 批量为视频生成字幕&#xff0c;并可将字幕翻译成其它语言。这是一个客户端工具, 跨平台支持 mac 和 windows 系统 项目地址: https://gitcode.com/gh_mirrors/vi…

作者头像 李华
网站建设 2026/10/15 19:06:13

YOLOv13轻量高效实测:手机端也能实时检测

YOLOv13轻量高效实测&#xff1a;手机端也能实时检测 在目标检测领域&#xff0c;我们总在追问一个朴素问题&#xff1a;能不能既快又准&#xff1f; 不是“勉强能用”的边缘推理&#xff0c;而是真正意义上——在骁龙8 Gen3手机上&#xff0c;每秒处理50帧高清画面&#xff0…

作者头像 李华