通過上一篇Flutter實踐分析之——平臺整合Hybrid Composition我們對平臺視圖的原理有了一定的了解,我們知道FlutterMutatorView是平臺視圖PlatofrmView的parentView,那么我們再拋出幾個疑問:
- 一個widget tree中多個PlatformView的時候,是對應一個還是多個FlutterMutatorView?
- widget tree中多個PlatformView重疊的時候,是對應一個還是多個FlutterMutatorView?
- 在widget tree中PlatformView上面再顯示widget的情況下又是怎么處理的
其實上面幾種情況,通過之前的文章原理分析,也能知道結果,本文將通過實際案例來分析不同場景下的處理方式,
widget tree中多個PlatformView不重疊
話不多說我們首先來看同一個Flutter UI顯示多個PlatformView,不重疊的情況是什么樣的
UI效果:

通過Layout Inspect我們可以很清晰的看到,在Hybrid Composition模式下的PlatformView就是通過FlutterMutatorView承載的,如果是多個PlatformView的情況下,會實體化多個FlutterMutatorView,一個PlatformView對于一個FlutterMutatorView,相互之間不影響,
widget tree中多個PlatformView有重疊
同樣我們來看看PlatformView重疊情況

我們發現多個PlatformView重疊跟沒有重疊的區別在于重疊的情況下,每個PlatformView會多出一個FlutterImageView,原因在于PlatformViewsController的兩個不同方法:
-
onDisplayPlatformView
該方法在PlatformView顯示的時候呼叫,內部會創建FlutterImageView并添加到FlutterView,界面每次更新都會執行改方法,但是FlutterImageView實體只有一個,
-
createOverlaySurface
該方法是在多個PlatformView有重疊的情況下會被呼叫,每次重疊覆寫都會呼叫到該方法,從而創建FlutterImageView
widget tree中PlatformView上面再顯示widget
同樣先看效果

如果再PlatformView上面呈現Flutter Widget的情況下,Flutter Widget是繪制在FlutterImageView上,
如果Flutter widget沒有跟PlatformView重疊呢,結果顯然很明確,那就是flutter widget與Flutter ui一樣都顯示在FlutterSurfaceView上,看下Layout inspect

總結
根據上面的分享總結一下,也就是說,根據如果不在一個區域內,那么這幾個控制元件就會共用一個FlutterImageView,如果一旦有重疊/公用的區域,各個PlatformView就會各自使用自己的FlutterImageView` ,另外需要注意的在Hybrid Composition模式下,一個PlatformView默認情況下承載者是FlutterMutatorView,而FlutterMutatorView作用主要就是為了調整原生控制元件PlatformView接入到FlutterView中顯示的大小位置和Matrix
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344276.html
標籤:其他
