Flutter实体返回键与pop方法行为不一致

问题描述:

Flutter中连续跳转了多个Page后,按导航栏返回按钮(执行得pop方法),与按手机实体返回键返回行为不一致。

复现步骤:

有4个Page,分别为,Page1,Page2,Page3,Page4;

跳转顺序:Page1(跳转后销毁)->Page2->Page3->Page4;

此时按导航栏的返回按钮表现为:Page4->Page3->Page2;行为正常。

若按手机的实体键表现为:Page4->Page2;行为异常。

问题原因:

Page1为StatelessWidget类型,为App的启动入口页;
Page2为StatefulWidget类型,为进入App主页前的一个过渡页(逻辑需要,先选择分类后才能进主页);
Page3为StatelessWidget类型,为App的主页(Main+4个Tab);
Page4为StatefulWidget类型,为二级页面;

Page1->Page2时使用pushAndRemoveUntil,跳转后Page1销毁;
Page2->Page3,Page3->Page4时都使用push,页面都未销毁,此时再按实体返回键时,返回逻辑就出错了,由Page4直接返回到了Page2。

解决办法:

经过一段时间研究,Page2跳转至Page3时使用pushAndRemoveUntil,销毁掉Page2,此时再从Page4按返回键就可以正常返回到Page3。

大部分的Flutter的教程一般都只说了StatelessWidget和StatefulWidget的区别,一个静态,一个动态,但甚少有说在跳转及返回逻辑方便的区别;

通过这些行为,貌似能窥探到一些逻辑,如果StatelessWidget类型的页面在页面栈的中间,那么你在栈顶按返回键,会直接跳过StatelessWidget类型的页面,而返回到它的上一级,因此整个程序中StatelessWidget类型的页面最好最多使用两个,即入口main.dart,以及主页,将主页作为整个应用的栈底页面,或只将入口main.dart设置为StatelessWidget。

至于为什么要用StatelessWidget,是因为可以在StatelessWidget中定义一些主题,国际化,状态管理等各种配置。

猜你喜欢

转载自blog.csdn.net/baiyuliang2013/article/details/130384657
今日推荐