- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 viewportFraction
为 0.8 的 PageView/ListView 来显示下一张幻灯片的预览。它看起来像这样:
似乎无法让当前幻灯片向左对齐,如下所示。对吗?
我找到了这个解决方案。将水平滚动的 ListView 与 PageScrollPhysics()
一起使用,起初看起来很有希望,但是,这种方式页面捕捉基于屏幕宽度(?)而不是基于 ListView 子级,因此捕捉关闭相当多。
有没有办法让页面根据 child 的大小对齐?
最佳答案
我的回答有点晚了,但它可能会帮助其他人寻找同样的东西。PageScrollPhysics 使用屏幕宽度。您需要创建自己的 ScrollPhysics,它使用您的项目宽度来分页。这是一个例子:
ListView.builder(
physics: PagingScrollPhysics(itemDimension: YOUR_ITEM_WIDTH),
itemCount:items.length,
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return YOUR_CHILD();
}
)
以及新的 ScrollPhysics:
import 'package:flutter/material.dart';
class PagingScrollPhysics extends ScrollPhysics {
final double itemDimension;
PagingScrollPhysics({required this.itemDimension, ScrollPhysics? parent}) : super(parent: parent);
@override
PagingScrollPhysics applyTo(ScrollPhysics? ancestor) {
return PagingScrollPhysics(itemDimension: itemDimension, parent: buildParent(ancestor));
}
double _getPage(ScrollMetrics position) {
return position.pixels / itemDimension;
}
double _getPixels(double page) {
return page * itemDimension;
}
double _getTargetPixels(ScrollMetrics position, Tolerance tolerance, double velocity) {
double page = _getPage(position);
if (velocity < -tolerance.velocity) {
page -= 0.5;
} else if (velocity > tolerance.velocity) {
page += 0.5;
}
return _getPixels(page.roundToDouble());
}
@override
Simulation? createBallisticSimulation(ScrollMetrics position, double velocity) {
if ((velocity <= 0.0 && position.pixels <= position.minScrollExtent) || (velocity >= 0.0 && position.pixels >= position.maxScrollExtent)) return super.createBallisticSimulation(position, velocity);
final Tolerance tolerance = this.tolerance;
final double target = _getTargetPixels(position, tolerance, velocity);
if (target != position.pixels) return ScrollSpringSimulation(spring, position.pixels, target, velocity, tolerance: tolerance);
return null;
}
@override
bool get allowImplicitScrolling => false;
}
关于flutter - ListView PageScrollPhysics 捕捉基于子宽度/PageView with viewportFraction < 1 align left,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61545073/
似乎 Flutter 不支持动态更改 Controller 值,或者我遗漏了一些东西。我在谷歌上搜索了很多,但找不到这个具体案例。 我在这里想要实现的是,当在 PageView 中双击图像时,它会放大
当您为 PageController 创建 viewportFraction 值为 <1.0 的 PageView 时,页面将被吸附到视口(viewport)的中心,如下所示: 我希望当前页面捕捉到视
我有一个 viewportFraction 为 0.8 的 PageView/ListView 来显示下一张幻灯片的预览。它看起来像这样: 似乎无法让当前幻灯片向左对齐,如下所示。对吗? 我找到了这个
我是一名优秀的程序员,十分优秀!