NestedScrollView内的PageView,与AutomaticKeepAliveClientMixin保持同步,每个PageView内的所有ListView将共享相同的滚动行为

NestedScrollView内的PageView,与AutomaticKeepAliveClientMixin保持同步,每个PageView内的所有ListView将共享相同的滚动行为,listview,flutter,nestedscrollview,Listview,Flutter,Nestedscrollview,我得到了一个类似NestedScrollView>PageView>ListView的页面结构,问题是当我在ListView中滚动时,其他ListView也会滚动,就像它们共享同一个滚动控制器一样 我在下面做了一个演示,并测试了如果没有NestedScrollView或AutomaticKepaLiveClientMixin,一切都会正常。有人知道怎么修吗 import'dart:math'; 进口“包装:颤振/材料.省道”; void main()=>runApp(MyApp()); 类My

我得到了一个类似NestedScrollView>PageView>ListView的页面结构,问题是当我在ListView中滚动时,其他ListView也会滚动,就像它们共享同一个滚动控制器一样

我在下面做了一个演示,并测试了如果没有NestedScrollView或AutomaticKepaLiveClientMixin,一切都会正常。有人知道怎么修吗

import'dart:math';
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
静态常量列表选项卡=[“投标”、“资格预审”、“winCandidate”、“winBid”];
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:安全区(
子:列(
mainAxisSize:mainAxisSize.max,
mainAxisAlignment:mainAxisAlignment.start,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
///*还有别的吗
容器(
宽度:MediaQuery.of(context).size.width,
高度:100.0,
颜色:颜色。橙色,
儿童:中心(
子:文本(
“还有别的东西……”,
样式:TextStyle(
颜色:颜色,黑色,
字体大小:40.0,
),
),
),
),
///*嵌套滚动视图
扩大(
子:嵌套滚动视图(
控制器:ScrollController(),
headerSliverBuilder:(BuildContext上下文,boolInnerBoxIsCrolled){
返回[
银光吸收器(
句柄:NestedScrollView.SliverOverlapsAberHandleFor(上下文),
孩子:滑杆(
标题:文本('NestedScrollView AppBar'),
扩展高度:90.0,
强制提升:内包装箱为羊角形,
),
),
];
},
正文:NotificationListener(
onNotification:(滚动通知)=>true,
///*网页浏览
子:页面视图(
物理:弹跳CrollPhysics(),
控制器:PageController(),
onPageChanged:(int page){},
儿童:[
…List.generate(
4.
(int index)=>BulletinPageView(
///*保持每个页面视图的滚动位置
键:PageStorageKey(索引),
pageIndex:index,
),
),
],
),
),
),
),
],
),
),
);
}
}
///***
///*嵌套滚动视图内的每个页面视图内容
/// */
类BulletinPageView扩展StatefulWidget{
const BulletinPageView({
关键点,
@需要此.pageIndex,
}):super(key:key);
最终整版索引;
@凌驾
_BulletinPageViewState createState()=>\u BulletinPageViewState();
}
类_BulletinPageViewState扩展状态
///*每次更改页面时,无需重新蚀刻
使用AutomaticEpaLiveClientMixin{
@凌驾
bool get wantKeepAlive=>true;
未来数据列表;
@凌驾
void initState(){
super.initState();
_getDataList=_fetchDataList();
}
Future _fetchDataList()异步{
等待未来。延迟(持续时间(毫秒:1500));
最终整数长度=(随机().nextInt(5)+1)*20;
最终列表dataList=List.generate(长度,(int i)=>i);
返回数据列表;
}
@凌驾
小部件构建(构建上下文){
super.build(上下文);
回归未来建设者(
未来:_getDataList,
生成器:(BuildContext上下文,异步快照){
交换机(快照.连接状态){
案例连接状态。无:
案例连接状态.active:
案例连接状态。正在等待:
返回中心(
子对象:CircularProgressIndicator(),
);
案例连接状态。完成:
if(snapshot.hasError){
返回文本('Error:${snapshot.Error}');
}
返回列(
mainAxisSize:mainAxisSize.max,
mainAxisAlignment:mainAxisAlignment.start,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
居中(
子:图标(
Icons.autorenew,
),
),
填充物(
填充:常量边集。对称(垂直:8.0),
儿童:中心(
子:文本(
“PageView${widget.pageIndex}”,
样式:TextStyle(
颜色:颜色,红色,
),
),
),
),
灵活的(
适合:FlexFit.宽松,
子:DataListView(
onNotification:\u onNotification,
dataList:snapshot.data,
),