簡體   English   中英

Flutter 方向改變后的 ListView adjustPositionForNewDimensions

[英]Flutter ListView adjustPositionForNewDimensions after orientation change

我目前正在實施一個 ListView,它試圖將當前“選定”項目保留在 ListView 的中間。

這可以通過實現一個看起來與PageScrollPhysics相似的自定義 ScrollPhysics 來簡單地實現

但是,如果屏幕的方向發生變化(因此 ListView 的尺寸發生變化),中間的項目將不再正確。 我注意到我們可以在 ScrollPhysics 中覆蓋一個名為adjustPositionForNewDimensions的方法,如果 ListView 的尺寸以編程方式更改,該方法可以完美運行,但不知何故,如果方向更改,則不會觸發此方法。

這個方法應該從這里調用,然后又在這里調用。 但是不知何故,在 ListView 上,它的維度發生了變化,變量haveDimensions為 true,但在方向發生變化(並因此發生維度變化)之后,它的false導致跳過correctForNewDimensions檢查。

我不完全清楚為什么這個變量是false的,即使尺寸確實發生了變化。 我錯過了什么,還是應該以不同的方式實現這種行為?

好吧,如果您想在方向更改時更改某些值,那么使用 flutter 非常容易,您可以使用OrientationBuilder ,它可以檢測當前設備的方向何時更改並相應地更新您的代碼:

body: OrientationBuilder(
  builder: (context, orientation) {
    return GridView.count(
      // Create a grid with 2 columns in portrait mode,
      // or 3 columns in landscape mode.
      crossAxisCount: orientation == Orientation.portrait ? 2 : 3,
    );
  },
),

您可以在以下網址找到更多相關信息: https://docs.flutter.dev/cookbook/design/orientation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM