Flutter 如何在listview中自动更正滚动位置?(颤振)

Flutter 如何在listview中自动更正滚动位置?(颤振),flutter,Flutter,我有一个水平listviewbuilder,如上图所示: 是否有一种方法可以自动更正当前位置,使右角的小部件完全适合其全宽?(这里是数字27)因为如果你停止滚动,如果它像图片中的数字27那样被剪下来,看起来就不好看了。那么,是否可以仅在最完整的itemwidget上停止,以便当前位置与图片中的位置不同 以下是我的listview生成器代码: import./date\u widget.dart'; 导入“package:date\u picker\u timeline/signatures/t

我有一个水平listviewbuilder,如上图所示:

是否有一种方法可以自动更正当前位置,使右角的小部件完全适合其全宽?(这里是数字27)因为如果你停止滚动,如果它像图片中的数字27那样被剪下来,看起来就不好看了。那么,是否可以仅在最完整的itemwidget上停止,以便当前位置与图片中的位置不同

以下是我的listview生成器代码:

import./date\u widget.dart';
导入“package:date\u picker\u timeline/signatures/tap.dart”;
进口“包装:颤振/材料.省道”;
导入“package:intl/date_symbol_data_local.dart”;
类MyDatePickerTimeline扩展了StatefulWidget{
日期时间当前日期;
日期更改;日期更改;
字符串区域设置;
//创建DatePickerTimeline小部件
桃金娘碱(
此日期:{
关键点,
这是一种变化,
this.locale=“de”,
}):super(key:key);
@凌驾
State createState()=>new _MyDatePickerTimelineState();
}
类_MyDatePickerTimelineState扩展状态{
@重写void initState(){
super.initState();
InitializeDataFormatting(widget.locale,null);
}
@凌驾
小部件构建(构建上下文){
返回容器(
//填充:仅限边缘设置(底部:600),
宽度:MediaQuery.of(context).size.width,
身高:200,
子项:ListView.builder(
相反:是的,
物品数量:5000件,
滚动方向:轴水平,
itemBuilder:(上下文,索引){
//返回日期小部件
DateTime _date=DateTime.now().减去(持续时间(天数:索引));
DateTime日期=新的日期时间(_date.year、_date.month、_date.day);
bool isselect=compareDate(日期,widget.currentDate);
返回MyDateWidget(
日期:日期:,
locale:widget.locale,
选择颜色:
isSelected?颜色。黑色12:颜色。透明,
onDateSelected:(selectedDate){
//选择一个日期
if(widget.onDateChange!=null){
widget.onDateChange(selectedDate);
}
设置状态(){
widget.currentDate=selectedDate;
});
},
);
},
),
);
}
bool比较日期(日期时间日期1,日期时间日期2){
返回日期1.day==日期2.day&&
date1.month==date2.month&&
date1.year==date2.year;
}

}
您似乎正在寻找。从物理类文档页面:

页面视图使用的滚动物理。这些物理特性导致页面视图捕捉到页面边界

ListView
physics
属性设置为
PageScrollPhysics
将使列表以分页、离散的方式滚动。如果您还将
列表视图
中的小部件的宽度设置为屏幕宽度的一小部分,则无论列表中有多少项、屏幕有多大或用户如何滚动,都不会剪切
列表视图
中的小部件

看看我写的这个示例,它向您展示了一种实现这种滚动物理的方法。您可以复制它并运行它,以查看它是否是您正在寻找的。请注意,每页滚动有3个条目,但在
列表视图中总共有7个条目,并且无法在视图中剪切任何条目

导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:ListView(
物理:物理(),
滚动方向:轴水平,
儿童:[
容器(
宽度:MediaQuery.of(context).size.width/3,
颜色:颜色。琥珀色[900],
子项:常量中心(子项:文本(‘条目A’),
),
容器(
宽度:MediaQuery.of(context).size.width/3,
颜色:颜色。琥珀色[800],
子项:常量中心(子项:文本('条目B')),
),
容器(
宽度:MediaQuery.of(context).size.width/3,
颜色:颜色。琥珀色[700],
子项:常量中心(子项:文本(‘条目C’),
),
容器(
宽度:MediaQuery.of(context).size.width/3,
颜色:颜色。琥珀色[600],
子项:常量中心(子项:文本(‘条目D’),
),
容器(
宽度:MediaQuery.of(context).size.width/3,
颜色:颜色。琥珀色[500],
子项:常量中心(子项:文本(‘条目E’),
),
容器(
宽度:MediaQuery.of(context).size.width/3,
颜色:颜色。琥珀色[400],
子项:常量中心(子项:文本('Entry F')),
),
容器(
宽度:MediaQuery.of(context).size.width/3,
颜色:颜色。琥珀色[300],
子项:常量中心(子项:文本(‘条目G’),
),
],
),
);
}
}

我可以用scrollphsysics或scrollcontroller做些什么吗?试着使用@drogelI建议的
物理:PageScrollPhysics()
解决它