更改方向后如何在Flutter中保留所选标签?

时间:2018-11-19 09:19:29

标签: flutter orientation state

我有一个带有Flutter中Tabs的应用程序,当我通过将设备从纵向旋转到横向来更改方向时,将重新构建窗口小部件树,并重置窗口小部件的状态。效果是将所选选项卡重设回第一个选项卡。我想防止在方向更改时重置状态,以使所选标签也不会更改。

在State类中,我使用了AutomaticKeepAliveClientMixin并进行了设置:

@override
bool get wantKeepAlive => true;

但这似乎没有任何作用。

有没有一种方法可以确保在旋转设备时保留我所有的应用程序和小部件状态?

如果可以的话,我可以发布代码,尽管我希望这是一个相当通用的问题,但我还没有想到一个简单的答案。

谢谢!

1 个答案:

答案 0 :(得分:2)

事实证明,一直追溯到我的小部件树之后,我发现最顶层的小部件被声明为无状态,并且在.build方法中放置了一行代码,从而导致整个状态每次重建小部件时都会重置应用程序-特别是在方向更改时。

要解决此问题,我将小部件更改为有状态,并将此代码移到state类中的initState方法中。完成此操作后,我的问题就解决了,因为该方向的变化不会影响此类的状态。

雷米(Remi)的评论正确无误。

整天的编码丢失了,但是学到了很多东西。 :-)

对于可能遇到类似问题的任何人,请仔细查看放置在.build方法中的任何代码,并意识到只要重新构建窗口小部件,它就会被调用。

仍然学习Flutter,但总体印象深刻。