我正在学习 sliverapp 吧....
在这里我使用了 Customscroll 视图,我想要三件事
SliverAppBar用于显示标题“交易”
** SliverPersistentHeader**。用于根据开关值(全部或仅正数)进行选择
3)条子列表。显示所有过滤数据
我在 Switch 的 onChange 方法中遇到问题。即使我已经应用了 setState,它也不会更改 showAll 变量的状态。
Widget build(BuildContext context) {
return SafeArea(
child:Scaffold(
body: CustomScrollView(
slivers: [
//sliver appbar
SliverAppBar(
expandedHeight: 300,
flexibleSpace: FlexibleSpaceBar(
title: Text('All'+showAll.toString()),
),
pinned: true,
floating: true,
),
SliverPersistentHeader(
delegate: _PinnedHeaderDelegate(child: Container(
height: 50,
color: Colors.white,
child: Row(children: [
Text('Show All Data'),
Switch(
value: showAll,
onChanged: (val) {
print(val);
setState(() {
showAll = val;
});
}),
],),
)),
pinned: true,
),
//sliver list
buildShowData(),
],
),
),
);
}
buildShowData() {
List<int> data;
if(showAll==true)
data=numbers;
else
data=numbers.where((element) => element>0).toList();
return SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
final number=data[index];
return Card(
child: ListTile(
title: Text('$number',style: TextStyle(
color: number<0?Colors.red:Colors.green
),),
),
);
},
childCount: data.length,
),
);
}
}
发送您的 _PinnedHeaderDelegate 类代码
希望 shouldRebuild 返回 true...
确保_PinnedHeaderDelegate类中的shouldRebuild返回true
输出 :
开关关闭:
开关已打开: