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!










share|improve this question


















  • 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















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!










share|improve this question


















  • 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













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!










share|improve this question













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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










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














  • 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












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.






share|improve this answer





















    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',
    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
    });


    }
    });














    draft saved

    draft discarded


















    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

























    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.






    share|improve this answer

























      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.






      share|improve this answer























        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.






        share|improve this answer












        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.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 19 at 23:12









        James A. White

        62




        62






























            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            Costa Masnaga

            Fotorealismo

            Sidney Franklin