Flutter ListView+ExpansionTile状态保持

ListView和ExpansionTile组合使用的时候,展开状态在页面滚动后不会保留,有两种解决方案:
1.给每个item增加PageStorageKey

ListView.builder(
  itemCount: 30,
  itemBuilder: (context, index) {
    return Container(
      key: PageStorageKey(index),
      ...
    );
  },
)

但我的情况比较复杂,item里面又套了ListView和GridView,这时候再使用PageStorageKey的话,ScrollPosition就会报错:

type 'bool' is not a subtype of type 'double?' in type cast

2.把ListView换成SingleChildScrollView+Column的模式

SingleChildScrollView(
  child: Column(
    children: [
      ExpansionTile(),
      ExpansionTile(),
      ExpansionTile(),
    ],
  ),
)

SingleChildScrollView不会清除屏幕外的组件,对性能影响较大,如果ExpansionTile个数不是很多的话,可以使用这种方式,ExpansionTile的状态会保留

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。