更改ListView-颤振中当前顶部可见项的颜色

更改ListView-颤振中当前顶部可见项的颜色,listview,flutter,dart,flutter-listview,Listview,Flutter,Dart,Flutter Listview,我希望在用户滚动列表时,列表中屏幕上最上面的可见项改变颜色 我得到的最接近的是pluggin ScrollablePositionedList: 列表中的第一个项目现在会更改颜色,或者在我热重新加载时显示在顶部屏幕上的任何项目。但它们不会在我滚动时实时执行 我真的很感激任何帮助。请在下面查找相关代码。提前谢谢 导入“包装:颤振/材料.省道”; 导入“包:provider/provider.dart”; 导入“package:scrollviewexperiment/models/place_d

我希望在用户滚动列表时,列表中屏幕上最上面的可见项改变颜色

我得到的最接近的是pluggin ScrollablePositionedList:

列表中的第一个项目现在会更改颜色,或者在我热重新加载时显示在顶部屏幕上的任何项目。但它们不会在我滚动时实时执行

我真的很感激任何帮助。请在下面查找相关代码。提前谢谢

导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“package:scrollviewexperiment/models/place_data.dart”;
导入“package:scrollviewexperiment/widgets/place_tile.dart”;
导入“package:scrollable_positioned_list/scrollable_positioned_list.dart”;
类PlacesList扩展StatefulWidget{
@凌驾
_PlacesListState createState()=>\u PlacesListState();
}
类_PlacesListState扩展状态{
最终项目定位器定位器项目定位器定位器=
ItemPositionsListener.create();
ItemScrollController_ItemScrollController=ItemScrollController();
int currentIndex=0;
@凌驾
void initState(){
super.initState();
currentVisibleIndex();
}
@凌驾
小部件构建(构建上下文){
退货消费者(
生成器:(上下文、位置数据、子项){
返回ScrollablePositionedList.builder(
itemCount:placeData.placeCount,
itemPositionsListener:itemPositionsListener,
itemBuilder:(上下文,索引){
最终地点=地点数据。地点[索引];
回程卡(
颜色:索引==当前索引?颜色。蓝色:颜色。白色,
标高:2.0,
形状:圆形矩形边框(
边界半径:边界半径。圆形(10.0)),
孩子:PlaceTile(
placeName:place.name,
距离:place.distance,
),
);
},
);
},
);
}
currentVisibleIndex(){
itemPositionsListener.itemPositions.addListener((){
int-min;
if(itemPositionsListener.itemPositions.value.isNotEmpty){
min=项目位置Slistener.itemPositions.value
.其中((ItemPosition位置)=>position.itemTrailingEdge>0)
.减少((ItemPosition最小值,ItemPosition位置)=>
position.itemtrailinge
我想出来了

我在ScrollablePositionedList.builder的itemBuilder中返回了一个ValueListenableBuilder

这不是世界上最干净的解决方案,所以如果有人能改进这一点,我很想知道

导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“package:scrollviewexperiment/models/place_data.dart”;
导入“package:scrollviewexperiment/widgets/place_tile.dart”;
导入“package:scrollable_positioned_list/scrollable_positioned_list.dart”;
类PlacesList扩展StatefulWidget{
@凌驾
_PlacesListState createState()=>\u PlacesListState();
}
类_PlacesListState扩展状态{
最终项目定位器定位器项目定位器定位器=
ItemPositionsListener.create();
@凌驾
小部件构建(构建上下文){
退货消费者(
生成器:(上下文、位置数据、子项){
返回ScrollablePositionedList.builder(
itemCount:placeData.placeCount,
itemPositionsListener:itemPositionsListener,
itemBuilder:(上下文,索引){
最终地点=地点数据。地点[索引];
返回值ListenableBuilder(
valueListenable:itemPositionsListener.itemPositions,
生成器:(上下文、位置、子对象){
int-min;
if(positions.isNotEmpty){
最小=位置
.其中((项目位置)=>
position.itemTrailingEdge>0)
.减少((ItemPosition最小值,ItemPosition位置)=>
position.itemtrailinge
我想出来了

我在ScrollablePositionedList.builder的itemBuilder中返回了一个ValueListenableBuilder

这不是世界上最干净的解决方案,所以如果有人能改进这一点,我很想知道

导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“package:scrollviewexperiment/models/place_data.dart”;
导入“package:scrollviewexperiment/widgets/place_tile.dart”;
导入“package:scrollable_positioned_list/scrollable_positioned_list.dart”;
类PlacesList扩展StatefulWidget{
@凌驾
_PlacesListState createState()=>\u PlacesListState();
}
类_PlacesListState扩展状态{
最终项目定位器定位器项目定位器定位器=
ItemPositionsListener.create();
@凌驾
小部件构建(构建上下文){
退货消费者(
生成器:(上下文、位置数据、子项){
返回ScrollablePositionedList.builder(
itemCount:placeData.placeCount,
itemPositionsListener:itemPositionsListener,
itemBuilder:(上下文,索引){
最终地点=地点数据。地点[索引];