我有一个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
}
Run Code Online (Sandbox Code Playgroud)
这个答案建议使用自定义ScrollController与keepScrollOffset设置为true,然而,这是默认值,并明确将其设置为true因此不会改变任何东西。
die*_*per 12
那是因为您Key每次重建小部件 (setState) 时都在使用新的。
要解决您的问题,只需将下面的代码移到build方法之外
final _scaffoldKey = new GlobalKey<ScaffoldState>();
Run Code Online (Sandbox Code Playgroud)
像这样 :
final _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3447 次 |
| 最近记录: |