How to prevent Flutter app from scrolling to top after calling setState?
I have an ExpansionPanelList
inside a SingleChildScrollView
. Whenever I un(fold) a panel and therefore call setState
, the SingleChildScrollView
scrolls back to the top. How can I prevent this?
@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
}
This answer suggests using a custom ScrollController
with keepScrollOffset
set to true
, however this is the default value and setting it explicitly to true
therefore does not change anything.
dart flutter
add a comment |
I have an ExpansionPanelList
inside a SingleChildScrollView
. Whenever I un(fold) a panel and therefore call setState
, the SingleChildScrollView
scrolls back to the top. How can I prevent this?
@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
}
This answer suggests using a custom ScrollController
with keepScrollOffset
set to true
, however this is the default value and setting it explicitly to true
therefore does not change anything.
dart flutter
add a comment |
I have an ExpansionPanelList
inside a SingleChildScrollView
. Whenever I un(fold) a panel and therefore call setState
, the SingleChildScrollView
scrolls back to the top. How can I prevent this?
@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
}
This answer suggests using a custom ScrollController
with keepScrollOffset
set to true
, however this is the default value and setting it explicitly to true
therefore does not change anything.
dart flutter
I have an ExpansionPanelList
inside a SingleChildScrollView
. Whenever I un(fold) a panel and therefore call setState
, the SingleChildScrollView
scrolls back to the top. How can I prevent this?
@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
}
This answer suggests using a custom ScrollController
with keepScrollOffset
set to true
, however this is the default value and setting it explicitly to true
therefore does not change anything.
dart flutter
dart flutter
edited Jan 2 at 20:15
Scriptim
asked Jan 1 at 21:39
ScriptimScriptim
5681719
5681719
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
That's because you are using a new Key
every time you rebuild the widget (setState).
To fix your issue just move the code below outside the build
method
final _scaffoldKey = new GlobalKey<ScaffoldState>();
Like this :
final _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
1
Thank you! This also solved another problem that I didn't even realize I had, which is, theExpansionPanelList
wasn't animated at all.
– Scriptim
Jan 1 at 23:51
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53999157%2fhow-to-prevent-flutter-app-from-scrolling-to-top-after-calling-setstate%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
That's because you are using a new Key
every time you rebuild the widget (setState).
To fix your issue just move the code below outside the build
method
final _scaffoldKey = new GlobalKey<ScaffoldState>();
Like this :
final _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
1
Thank you! This also solved another problem that I didn't even realize I had, which is, theExpansionPanelList
wasn't animated at all.
– Scriptim
Jan 1 at 23:51
add a comment |
That's because you are using a new Key
every time you rebuild the widget (setState).
To fix your issue just move the code below outside the build
method
final _scaffoldKey = new GlobalKey<ScaffoldState>();
Like this :
final _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
1
Thank you! This also solved another problem that I didn't even realize I had, which is, theExpansionPanelList
wasn't animated at all.
– Scriptim
Jan 1 at 23:51
add a comment |
That's because you are using a new Key
every time you rebuild the widget (setState).
To fix your issue just move the code below outside the build
method
final _scaffoldKey = new GlobalKey<ScaffoldState>();
Like this :
final _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
That's because you are using a new Key
every time you rebuild the widget (setState).
To fix your issue just move the code below outside the build
method
final _scaffoldKey = new GlobalKey<ScaffoldState>();
Like this :
final _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
answered Jan 1 at 23:10
diegoveloperdiegoveloper
12.9k11831
12.9k11831
1
Thank you! This also solved another problem that I didn't even realize I had, which is, theExpansionPanelList
wasn't animated at all.
– Scriptim
Jan 1 at 23:51
add a comment |
1
Thank you! This also solved another problem that I didn't even realize I had, which is, theExpansionPanelList
wasn't animated at all.
– Scriptim
Jan 1 at 23:51
1
1
Thank you! This also solved another problem that I didn't even realize I had, which is, the
ExpansionPanelList
wasn't animated at all.– Scriptim
Jan 1 at 23:51
Thank you! This also solved another problem that I didn't even realize I had, which is, the
ExpansionPanelList
wasn't animated at all.– Scriptim
Jan 1 at 23:51
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53999157%2fhow-to-prevent-flutter-app-from-scrolling-to-top-after-calling-setstate%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown