AnnotatedRegionLayers 回傳相對於裁剪區域的本地位置
摘要
#在註解搜尋中,AnnotatedRegionLayers
回傳的本地位置已變更為相對於裁剪區域,而非圖層。這使得本地位置更有意義且可靠,但會破壞直接執行註解搜尋並使用本地位置的程式碼。
背景
#註解是在渲染階段指定給螢幕上區域的中繼資料。使用位置搜尋註解會提供包含該位置的上下文資訊。它們用於偵測滑鼠事件和應用程式列的主題。
當 localPosition
首次加入搜尋結果時,它被定義為相對於擁有註解的圖層,結果證明這是一個設計上的錯誤。來自圖層的偏移量沒有意義且不可靠。例如,如果轉換矩陣是簡單的平移,Transform
小工具會在同一圖層上繪製偏移量,或者如果矩陣是非平凡的,則會推送專用的 TransformLayer
。前一種情況會保留先前的座標原點(例如,應用程式的左上角),而後一種情況會移動位置原點,因為它位於新圖層上。這兩種情況可能不會產生明顯的視覺差異,因為額外的圖層可能只是 99% 的縮放比例,儘管註解搜尋會回傳不同的結果。為了使此本地位置可靠,我們必須選擇一個結果來堅持使用。
變更描述
#由 AnnotatedRegionLayer
回傳的 localPosition
現在是它收到的本地位置減去 offset
,其中 offset
是裁剪區域相對於圖層的位置。
class AnnotatedRegionLayer<T> extends ContainerLayer {
@override
bool findAnnotations<S>(AnnotationResult<S> result, Offset localPosition, { required bool onlyFirst }) {
...
if (/* shouldAddAnnotation */) {
result.add(AnnotationEntry<S>(
annotation: typedValue,
// Used to be:
// localPosition: localPosition,
localPosition: localPosition - offset,
));
}
...
}
}
從概念上講,這改變了 AnnotatedRegionLayer.offset
和 size
的定義方式。它們以前表示「限制註解搜尋的裁剪矩形」,而現在它們共同代表「註解物件的區域」。
遷移指南
#積極使用此本地位置的程式碼可能直接與圖層互動,因為使用渲染物件或小工具已經使此結果不可靠。為了保留先前的行為,您可以重新實作 AnnotatedRegionLayer
以回傳不減去偏移量的本地位置。
時間軸
#已於版本中發布:1.15.2
在穩定版本中:1.17
參考資料
#API 文件
相關問題
相關 PR
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。頁面上次更新於 2024-04-04。 檢視原始碼 或 回報問題。