带有多个选项卡的 TabBarView 导致每个屏幕都在颤动中创建?

问题描述 投票:0回答:1

Tab1跳转到tab2,tab2界面调用initState() -> tab1界面调用dispose()。已创建新屏幕,已处理未选择的屏幕。一切都井井有条,工作完美。

但是,当涉及到 3 个选项卡时,事情变得有点奇怪:tab1、tab2、tab3。第一个场景和上面一样工作正常。

在 tab1 然后选择 tab2,tab2 screen 调用 initState() -> tab1 screen 调用 dispose()。当在 tab2 上然后选择 tab3 时,tab3 屏幕调用 initState() -> tab2 屏幕调用 dispose() 但是下面的场景变得相当混乱 2. 在tab1上然后选择tab3,tab1屏幕调用initState()和dispose() -> tab2屏幕调用initState() -> tab3屏幕调用initState() -> tab1屏幕调用dispose() -> tab2屏幕调用dispose()

从tab1跳转到tab3时,上面的场景主要有2个问题:

tab1 在跳转到第一个场景异常的tab3 之前调用了完整的循环方法initState() 和dispose()。如果我在 initState() 中放置了一个将再次触发的平台调用,这将导致问题。 tab2 屏幕甚至在未被选中时创建。这也是一个问题,因为如果我在 initState() 中放置了一些工作,它也会被意外触发。 我不确定这是否有意,但这显然不适合我。也许只是我做错了什么。我试图用谷歌搜索这个问题,但找不到任何东西。任何帮助将不胜感激。

用一种简单的语言,只需轻扫一下选项卡,它就会调用下一个选项卡的 init 方法。如果我转到另一个选项卡,它应该调用 init 方法。但如果不更改选项卡,它就会发生。

flutter tabbar
1个回答
0
投票

如果你想在

TabBarView
中保持你的屏幕状态,那么你可以在你的状态类中使用
AutomaticKeepAliveClientMixin

之后,你必须覆盖

wantKeepAlive
方法和
return true
.

举个例子:

class _DemoScreenState extends State<DemoScreen> with AutomaticKeepAliveClientMixin<DemoScreen>{

...

  @override
  Widget build(BuildContext context) { 
    // You have to call this method
    super.build(context); 

    /// your widget will be here
  }

  @override
  bool get wantKeepAlive => true;//you have to set it true

}
© www.soinside.com 2019 - 2024. All rights reserved.