此篇记录一些踩坑的地方,一些需要注意的点,以及我觉得需要记录的内容
AutomaticKeepAliveClientMixin
这个Mixin主要是用在tab中,如果想要避免切换tab的时候每次都重新初始化State的话,就需要用到这个Mixin。
Mixin的说明里写的很清楚,这个Mixin需要和StatefulWidget搭配使用,如果你想要自动保持状态,在声明class的时候加入这个Mixin
1 | Class PageState extends State<Page> with AutomaticKeepAliveClientMixin{} |
并且需要实现对应的wantKeepAlive方法
1 | @override |
最后需要在build方法中调用super.build
1 | @override |
这样就完成了tab的自动保持状态,第一次初始化过后,再次切换到这个tab就不会重新初始化状态了。
如果想要改变wantKeepAlive的状态,需要在改变wantKeepAlive的值之后,调用updateKeepAlive方法才可生效。
StatefulBuilder
学习flutter的第一天我们就会学到StatefulWidget和StatelessWidget的区别,如果状态会发生改变的话,必须要使用用StatefulWidget,这样才可以通过setState方法来改变状态,重新调用build方法来改变Widget,以达到更新状态的目的。
我在学习Flutter的过程中遇到了这样的问题,我创建了一个Dialog,但是我显示的内容却并不能根据state改变,经过查询我才知道,如果调用showDialog方法的话,如果不使用StatefulBuilder的话,这个Dialog默认是Stateless的,如果有改变状态的需求的话,就必须使用StatefulBuilder来构建Dialog,为Dialog创建自己的state,然后调用自己的state来改变Dialog的状态,如果调用StatefulWidget的setState方法的话是不能改变Dialog的状态的。
1 | // 普通的dialog |
1 | // Stateful Dialog |
需要改变状态时
1 | void _showDialog() { |