Flutter 圖片編輯板(一) 事件路由

一個圖片編輯板,有兩部分組成。編輯板和內容項。每一個內容項是被InteractiveViewer修飾的widget,具有縮放偏移的功能。

在圖片編輯板上, 會有多個內容相,圖片或文字(添加文字目前還沒做過)。 當要編輯其中一個項目時,必然需要先選中這個項目。這就牽扯到事件問題。是不是點中哪個看到的項目,這個項目就會發出事件?實際情況是不會的。因為InteractiveViewer的大小是覆蓋真個編輯板的,雖然看到的內容項小,其實是占用了所有編輯板的。這就導致事件無法傳遞給你看到并點擊的內容項。

這就需要我們重新實現編輯板的事件路由。

1. 我們在InteractiveViewer再修飾一層GestureDetector。這樣就能獲取在編輯板上點擊的所有事件!

2. 實時計算每一個內容項的事件區域,或者說在編輯板所占位置大小,也就是一個Rect對象。這里要注意縮放問題。

if (widget.transformationController != null &&widget.mergeItemInfo.eventArea != null) {double transX = widget.transformationController!.value.getTranslation().x; //the distance in UI review.double transY = widget.transformationController!.value.getTranslation().y;double scale = widget.transformationController!.value.getMaxScaleOnAxis();Rect eventArea = Rect.fromLTWH(widget.mergeItemInfo.initEventArea!.left * scale + transX,widget.mergeItemInfo.initEventArea!.top * scale + transY,widget.mergeItemInfo.initEventArea!.width * scale,widget.mergeItemInfo.initEventArea!.height * scale);widget.mergeItemInfo.eventArea = eventArea;}

3. 根據點擊的事件位置,路由的遍歷每一個內容項,查看是否命中,命中就返回事件給這個內容項。

  bool isInEventArea(TapDownDetails details) {Offset point = details.localPosition;if (eventArea != null) {return point.dx >= eventArea!.left &&point.dx <= eventArea!.left + eventArea!.width &&point.dy >= eventArea!.top &&point.dy <= eventArea!.top + eventArea!.height;}return false;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62535.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62535.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62535.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數倉技術hive與oracle對比(一)

準備 包括軟硬件環境、數據、測試數據三方面的準備內容。 環境 虛擬機軟件virtualbox7&#xff0c;同樣的虛擬機配置&#xff1a;內存2G、cpu一核&#xff0c;物理主機同一臺macbookpro&#xff08;13-2020款&#xff09;&#xff0c;所以硬盤IO讀寫速度一致。 綜上&#x…

AR眼鏡_消費級工業AR智能眼鏡主板硬件解決方案

AR眼鏡的研發是一項復雜的軟硬件集成工程&#xff0c;它需要在攝影、音頻、交互和連接等多個方面提供卓越的基礎體驗&#xff0c;因此產品的每個細節都顯得尤為重要。 在設計AR眼鏡時&#xff0c;重量、體積和散熱性能都是必須認真考量的關鍵因素。在芯片平臺的選擇上&#xff…

通信原理概論復習筆記(1)

1 緒論 消息: 通信系統傳輸對象, 信息的載體和物理表現形式. 信息: 消息的有效內容和內涵. 信號: 消息的傳輸載體. 模擬通信: 信源 → \to → 調制器 → \to → 信道(噪聲) → \to → 解調器 → \to → 信宿. 數字通信: 信源 → \to → 信源編碼(壓縮數字化) → \to →…

ASPICE評估如何優化軟件開發、測試和部署流程

ASPICE&#xff08;Automotive SPICE&#xff0c;即汽車軟件過程改進及能力評定&#xff09;評估在提高軟件開發、測試、部署的速度和質量方面發揮著重要作用。以下是ASPICE評估如何具體提高這些環節的具體方式&#xff1a; 一、提高軟件開發效率 標準化流程&#xff1a;ASPIC…

【OpenCV】Canny邊緣檢測

理論 Canny 邊緣檢測是一種流行的邊緣檢測算法。它是由 John F. Canny 在 1986 年提出。 這是一個多階段算法&#xff0c;我們將介紹算法的每一個步驟。 降噪 由于邊緣檢測易受圖像中的噪聲影響&#xff0c;因此第一步是使用 5x5 高斯濾波器去除圖像中的噪聲。我們在前面的章…

Ubuntu 安裝 web 服務器

安裝 apach sudo apt install apache2 -y 查看 apach2 版本號 apache2 -v 檢查是否啟動服務器 sudo service apache2 status 檢查可用的 ufw 防火墻應用程序配置 sudo ufw app list 關閉防火墻 sudo ufw disable 更改允許通過端口流量 sudo ufw allow Apache Full 開啟…

如何落地文件即服務?--- 基于makeself封裝服務并啟動

我通常想能不能給客戶一個文件&#xff0c;然后客戶通過執行這個簡單的指令就可以吧&#xff0c;一個服務在本地起來&#xff1f; 這是一種文件即服務的思想&#xff0c;不知道你有沒有類似的想法&#xff0c;當我發現https://makeself.io/ &#xff0c;我覺得它能很好的解決我…

mysql集群MHA方式部署

1. 基本信息 部署機器角色部署路徑192.168.242.71MySQL-Mater MHA-NodeMySQL: /alidata1/mysql-5.7.43192.168.242.72MySQL-Slave MHA-NodeMHA-Node: /alidata1/admin/tools/mha4mysql-node-0.58192.168.242.73MySQL-Slave MHA-Node192.168.242.74MHA-ManagerMHA-Manager: …

【C++】8___繼承

目錄 一、基本語法 二、繼承方式 三、對象模型 四、繼承中的構造與析構的順序 五、繼承中同名成員處理 六、多繼承語法 七、菱形繼承 一、基本語法 好處&#xff1a;減少重復的代碼 語法&#xff1a; class 子類 &#xff1a; 繼承方式 父類 子類 也稱為 派生類 父類…

Netty客戶端接收不到服務端發送的數據問題

文章目錄 前言問題描述相關代碼解決方法 前言 環境 JDK&#xff1a;64位 jdk1.8.0_201 Netty&#xff1a;4.1.39.Final 問題描述 項目中使用Netty接受客戶端的消息&#xff0c;客戶端為硬件設備&#xff0c;在接受數據后發送數據到服務端。 同時因為客戶端沒有聯網&#xff…

IDEA方法注釋模板設置

目錄 創建模板 新建模板&#xff1a;命名為* 設置模板內容-IDEA格式模板 設置模板應用場景 設置參數 創建模板 /**Enter這里我們也按照這種習慣來設置IDEA的方法注釋&#xff1a;File-->Settings-->Editor-->Live Templates 先新建模板組&#xff0c;然后在模板組中…

vscode 配置C/C++環境控制臺參數

您可以通過以下步驟在VS Code中配置C/C環境的控制臺參數&#xff1a; 1&#xff0c;打開VS Code并進入您的C/C項目 2&#xff0c;點擊左側的"調試"圖標&#xff0c;然后點擊頂部的齒輪圖標&#xff0c;選擇“launch.json”。 3&#xff0c;在"launch.json&qu…

深度學習筆記之BERT(五)TinyBERT

深度學習筆記之TinyBERT 引言回顧&#xff1a;DistilBERT模型TinyBERT模型結構TinyBERT模型策略Transformer層蒸餾嵌入層蒸餾預測層蒸餾 TinyBERT模型的訓練效果展示 引言 上一節介紹了 DistilBERT \text{DistilBERT} DistilBERT模型&#xff0c;本節將繼續介紹優化性更強的知…

正則表達式——參考視頻B站《奇樂編程學院》

智能指針 一、背景&#x1f388;1.1. 模式匹配&#x1f388;1.2. 文本替換&#x1f388;1.3. 數據驗證&#x1f388;1.4. 信息提取&#x1f388;1.5. 拆分字符串&#x1f388;1.6. 高級搜索功能 二、原料2.1 參考視頻2.2 驗證網址 三、用法3.1 限定符3.1.1 ?3.1.2 *3.1.3 3.1.…

appium學習之二:adb命令

1、查看設備 adb devices 2、連接 adb connect IP:端口 3、安裝 adb install xxx.apk 4、卸載 adb uninstall 【包名】 5、把對應目錄下的1.txt文件傳到手機sdcard下 adb push 1.txt /sdcard 6、進入對應的設備里 adb shell 7、切入sdcard目錄 cd /sdcard 8、ls 查…

Tablesaw封裝Plot.ly實現數據可視化

上文介紹tablesaw的數據處理功能&#xff0c;本文向你展示其數據可視化功能&#xff0c;并通過幾個常用圖表示例進行說明。 Plot.ly包裝 可視化是數據分析的重要組成部分&#xff0c;無論你只是“查看”新數據集還是驗證機器學習算法的結果。Tablesaw是一個開源、高性能的Java…

Python實現中國象棋

探索中國象棋 Python 代碼實現&#xff1a;從規則邏輯到游戲呈現 中國象棋&#xff0c;這款源遠流長的棋類游戲&#xff0c;承載著深厚的文化底蘊與策略智慧。如今&#xff0c;借助 Python 與 Pygame 庫&#xff0c;我們能夠在數字世界中復刻其魅力&#xff0c;深入探究代碼背后…

互聯網、物聯網的相關標準

互聯網的相關標準 網絡通信協議&#xff1a; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;&#xff1a;用于在網絡中傳輸文本、圖像、音頻和視頻等數據的協議。它基于請求-響應模型&#xff0c;客戶端發送請求給服務器&#xff0c;服務器返回響應。HTTPS&a…

學習Ajax (概述,應用場景,使用jQury 實現ajax)

目錄 前言 概述 什么是Ajax? 同步交互與異步交互的區別是什么呢&#xff1f; 應用場景 場景1 在搜索框搜索 資源 場景2 登錄業務的對用戶名處理 AJAX的優缺點 優點&#xff1a; 缺點&#xff1a; 使用jQury 實現ajax 使用步驟 1 引入jQury 文件 2 使用Ajax 函數…

網迅通推出新一代智能家居拓展網關

Zigbee 型智能家居拓展網關 產品概述 A、概述 Zigbee 是一種短距離、低功耗的無線通信技術名稱。其特點是近距離、低復雜度、低功耗、低數據速率、低成本。ZigBee 模塊是一種物聯網無線數據終端&#xff0c;利用 ZigBee 網絡為用戶提供無線數據傳輸功能。該產品采用高性能的…