dart - 调用 setState 后如何防止 Flutter 应用滚动到顶部?
问题描述
我有ExpansionPanelList
一个SingleChildScrollView
. 每当我(展开)折叠面板并因此调用setState
时,SingleChildScrollView
滚动回顶部。我怎样才能防止这种情况?
@override
Widget build(BuildContext context) {
final _scaffoldKey = new GlobalKey<ScaffoldState>();
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
body: new SingleChildScrollView(
child: new ExpansionPanelList(
children: <ExpansionPanel>[
// panels
],
expansionCallback: (int index, bool isExpanded) {
setState(() {
// toggle expanded
});
},
), // ExpansionPanelList
), // SingleChildScrollView
); // Scaffold
}
这个答案建议使用设置为的自定义ScrollController
,keepScrollOffset
但是true
这是默认值,并且将其显式设置为true
因此不会改变任何内容。
解决方案
Key
那是因为您每次重建小部件(setState)时都使用新的。
要解决您的问题,只需将下面的代码移到build
方法之外
final _scaffoldKey = new GlobalKey<ScaffoldState>();
像这样 :
final _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
推荐阅读
- elasticsearch - 在 ELK 中配置 number_of_shards 和 number_of_replicas
- python - Python While循环无限
- forms - Symfony 表单渲染过早显示错误
- python - tkinter - 使用 wm_manage 和 wm_forget 停靠和取消停靠框架
- java - 为什么 vavr 的 Function1 不接受 Seq
类接受 Seq ? - java - 调整 JLabel 大小以适应调整大小的主 JPanel
- python - 在“原子”块结束之前,您无法执行查询
- angular - 剑道网格内的剑道树视图
- javascript - 如何在 Angular 中为响应式表单构建可重用字段
- c++ - ROS问题:如何用opencv4正确编译自定义cv_bridge