【问题标题】:Flutter ListView adjustPositionForNewDimensions after orientation change方向更改后的 Flutter ListView adjustPositionForNewDimensions
【发布时间】:2022-12-09 19:34:31
【问题描述】:

我目前正在实施一个 ListView,它试图将当前“选定”项目保留在 ListView 的中间。

这是通过实现 PageScrollPhysics 看起来很熟悉的自定义 ScrollPhysics 来简单实现的

但是,如果屏幕的方向发生变化(因此 ListView 的尺寸发生变化),中间的项目将不再正确。我注意到我们可以在名为 adjustPositionForNewDimensions 的 ScrollPhysics 中覆盖一个方法,如果 ListView 的尺寸以编程方式更改,该方法可以完美运行,但如果方向更改,则不会以某种方式触发此方法。

此方法应该从 here 调用,而 here 又调用 here。但是不知何故在 ListView 上它的尺寸改变变量 haveDimensions 是真的但是在方向改变(因此尺寸改变)之后它的 false 导致跳过 correctForNewDimensions 检查。

我不完全清楚为什么这个变量是false,即使尺寸确实发生了变化。我错过了什么,还是应该以不同的方式实现这种行为?

【问题讨论】:

    标签: flutter listview scroll orientation


    【解决方案1】:

    好吧,如果你想在方向改变时改变一些值,那么使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 2019-09-26
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多