How to preserve the selected tab in Flutter upon orientation change?
up vote
0
down vote
favorite
I have an app with Tabs in Flutter and when I change orientation by rotating the device from portrait to landscape, the widget tree gets rebuilt and the state of the widgets gets reset. The effect is that the selected tab is reset back to the first tab. I would like to prevent the state from being reset during orientation changes so that the selected tab does not also change.
In my State class I'm using the AutomaticKeepAliveClientMixin and have set:
@override
bool get wantKeepAlive => true;
but that does not seem to have any effect.
Is there a way to ensure that all of my application and widget states are preserved when the device is rotated?
I can post code if that would be helpful, although I expect that this is a fairly generic question with a simple answer that I have not thought of yet.
Thanks!
flutter orientation state
add a comment |
up vote
0
down vote
favorite
I have an app with Tabs in Flutter and when I change orientation by rotating the device from portrait to landscape, the widget tree gets rebuilt and the state of the widgets gets reset. The effect is that the selected tab is reset back to the first tab. I would like to prevent the state from being reset during orientation changes so that the selected tab does not also change.
In my State class I'm using the AutomaticKeepAliveClientMixin and have set:
@override
bool get wantKeepAlive => true;
but that does not seem to have any effect.
Is there a way to ensure that all of my application and widget states are preserved when the device is rotated?
I can post code if that would be helpful, although I expect that this is a fairly generic question with a simple answer that I have not thought of yet.
Thanks!
flutter orientation state
1
Can you add some example? It's likely something wrong in your widget tree
– Rémi Rousselet
Nov 19 at 9:43
1
Ideally it is not suppose to happen. Please share your code.
– Arnold Parge
Nov 19 at 15:21
Thanks... I've just recreated a trivial example and, as you suggest, it doesn't happen. I'm using scoped model and I suspect that I have my ScopedModelDescendent declared in the wrong place in the tree somewhere. I'm working now to isolate it... Once I do, I'll update this post. Thanks for your suggestions!
– James A. White
Nov 19 at 19:03
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have an app with Tabs in Flutter and when I change orientation by rotating the device from portrait to landscape, the widget tree gets rebuilt and the state of the widgets gets reset. The effect is that the selected tab is reset back to the first tab. I would like to prevent the state from being reset during orientation changes so that the selected tab does not also change.
In my State class I'm using the AutomaticKeepAliveClientMixin and have set:
@override
bool get wantKeepAlive => true;
but that does not seem to have any effect.
Is there a way to ensure that all of my application and widget states are preserved when the device is rotated?
I can post code if that would be helpful, although I expect that this is a fairly generic question with a simple answer that I have not thought of yet.
Thanks!
flutter orientation state
I have an app with Tabs in Flutter and when I change orientation by rotating the device from portrait to landscape, the widget tree gets rebuilt and the state of the widgets gets reset. The effect is that the selected tab is reset back to the first tab. I would like to prevent the state from being reset during orientation changes so that the selected tab does not also change.
In my State class I'm using the AutomaticKeepAliveClientMixin and have set:
@override
bool get wantKeepAlive => true;
but that does not seem to have any effect.
Is there a way to ensure that all of my application and widget states are preserved when the device is rotated?
I can post code if that would be helpful, although I expect that this is a fairly generic question with a simple answer that I have not thought of yet.
Thanks!
flutter orientation state
flutter orientation state
asked Nov 19 at 9:19
James A. White
62
62
1
Can you add some example? It's likely something wrong in your widget tree
– Rémi Rousselet
Nov 19 at 9:43
1
Ideally it is not suppose to happen. Please share your code.
– Arnold Parge
Nov 19 at 15:21
Thanks... I've just recreated a trivial example and, as you suggest, it doesn't happen. I'm using scoped model and I suspect that I have my ScopedModelDescendent declared in the wrong place in the tree somewhere. I'm working now to isolate it... Once I do, I'll update this post. Thanks for your suggestions!
– James A. White
Nov 19 at 19:03
add a comment |
1
Can you add some example? It's likely something wrong in your widget tree
– Rémi Rousselet
Nov 19 at 9:43
1
Ideally it is not suppose to happen. Please share your code.
– Arnold Parge
Nov 19 at 15:21
Thanks... I've just recreated a trivial example and, as you suggest, it doesn't happen. I'm using scoped model and I suspect that I have my ScopedModelDescendent declared in the wrong place in the tree somewhere. I'm working now to isolate it... Once I do, I'll update this post. Thanks for your suggestions!
– James A. White
Nov 19 at 19:03
1
1
Can you add some example? It's likely something wrong in your widget tree
– Rémi Rousselet
Nov 19 at 9:43
Can you add some example? It's likely something wrong in your widget tree
– Rémi Rousselet
Nov 19 at 9:43
1
1
Ideally it is not suppose to happen. Please share your code.
– Arnold Parge
Nov 19 at 15:21
Ideally it is not suppose to happen. Please share your code.
– Arnold Parge
Nov 19 at 15:21
Thanks... I've just recreated a trivial example and, as you suggest, it doesn't happen. I'm using scoped model and I suspect that I have my ScopedModelDescendent declared in the wrong place in the tree somewhere. I'm working now to isolate it... Once I do, I'll update this post. Thanks for your suggestions!
– James A. White
Nov 19 at 19:03
Thanks... I've just recreated a trivial example and, as you suggest, it doesn't happen. I'm using scoped model and I suspect that I have my ScopedModelDescendent declared in the wrong place in the tree somewhere. I'm working now to isolate it... Once I do, I'll update this post. Thanks for your suggestions!
– James A. White
Nov 19 at 19:03
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
As it turns out, after tracing all the way back through my Widget tree, I discovered that my topmost widget was declared as Stateless and I had placed a line of code in the .build method that resulted in the state of the entire app getting reset each time the widget was rebuilt - particularly on orientation changes.
To fix, I changed the widget to Stateful and moved this code into the state class into the initState method. Once I did this, my problem was resolved because the state of this class is not affected on an orientation change.
Remi was right on the money with his comment.
A full day of coding lost, but a lot learned. :-)
To anyone who might come across a similar problem, take a very close look at any code you place into a .build method and realize that it will get called any time the widget is rebuilt.
Still learning Flutter, but overall impressed.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
As it turns out, after tracing all the way back through my Widget tree, I discovered that my topmost widget was declared as Stateless and I had placed a line of code in the .build method that resulted in the state of the entire app getting reset each time the widget was rebuilt - particularly on orientation changes.
To fix, I changed the widget to Stateful and moved this code into the state class into the initState method. Once I did this, my problem was resolved because the state of this class is not affected on an orientation change.
Remi was right on the money with his comment.
A full day of coding lost, but a lot learned. :-)
To anyone who might come across a similar problem, take a very close look at any code you place into a .build method and realize that it will get called any time the widget is rebuilt.
Still learning Flutter, but overall impressed.
add a comment |
up vote
0
down vote
As it turns out, after tracing all the way back through my Widget tree, I discovered that my topmost widget was declared as Stateless and I had placed a line of code in the .build method that resulted in the state of the entire app getting reset each time the widget was rebuilt - particularly on orientation changes.
To fix, I changed the widget to Stateful and moved this code into the state class into the initState method. Once I did this, my problem was resolved because the state of this class is not affected on an orientation change.
Remi was right on the money with his comment.
A full day of coding lost, but a lot learned. :-)
To anyone who might come across a similar problem, take a very close look at any code you place into a .build method and realize that it will get called any time the widget is rebuilt.
Still learning Flutter, but overall impressed.
add a comment |
up vote
0
down vote
up vote
0
down vote
As it turns out, after tracing all the way back through my Widget tree, I discovered that my topmost widget was declared as Stateless and I had placed a line of code in the .build method that resulted in the state of the entire app getting reset each time the widget was rebuilt - particularly on orientation changes.
To fix, I changed the widget to Stateful and moved this code into the state class into the initState method. Once I did this, my problem was resolved because the state of this class is not affected on an orientation change.
Remi was right on the money with his comment.
A full day of coding lost, but a lot learned. :-)
To anyone who might come across a similar problem, take a very close look at any code you place into a .build method and realize that it will get called any time the widget is rebuilt.
Still learning Flutter, but overall impressed.
As it turns out, after tracing all the way back through my Widget tree, I discovered that my topmost widget was declared as Stateless and I had placed a line of code in the .build method that resulted in the state of the entire app getting reset each time the widget was rebuilt - particularly on orientation changes.
To fix, I changed the widget to Stateful and moved this code into the state class into the initState method. Once I did this, my problem was resolved because the state of this class is not affected on an orientation change.
Remi was right on the money with his comment.
A full day of coding lost, but a lot learned. :-)
To anyone who might come across a similar problem, take a very close look at any code you place into a .build method and realize that it will get called any time the widget is rebuilt.
Still learning Flutter, but overall impressed.
answered Nov 19 at 23:12
James A. White
62
62
add a comment |
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f53371514%2fhow-to-preserve-the-selected-tab-in-flutter-upon-orientation-change%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
1
Can you add some example? It's likely something wrong in your widget tree
– Rémi Rousselet
Nov 19 at 9:43
1
Ideally it is not suppose to happen. Please share your code.
– Arnold Parge
Nov 19 at 15:21
Thanks... I've just recreated a trivial example and, as you suggest, it doesn't happen. I'm using scoped model and I suspect that I have my ScopedModelDescendent declared in the wrong place in the tree somewhere. I'm working now to isolate it... Once I do, I'll update this post. Thanks for your suggestions!
– James A. White
Nov 19 at 19:03