在flutter中改变整个页面与一个按钮的状态。

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

好的,我正在用flutter做一个媒体播放器应用。现在当我按下播放按钮时,它变成了暂停按钮。(只有按钮上的图标改变)

按钮的onPressed函数改变布尔值,并调用 setState() 方法。

它是这样的。

bool _playing = false;  
void _onPlayButtonPressed() {
         setState () {
           if (_playing)
              _playing = false;
           else
              _playing = true;
         }
    }

我还有一个函数,它基于 _playing.

Widget _playButtonIcon() {

//This function has no setState() call

  if (_playing)
      //return pause icon
  else
      //return play icon
}

一切正常。每当我按下按钮时,图标就会改变。然而,正如文档中提到的,也在Flutter Demo App中提到的。setState() 方法调用构建方法。这将重绘整个部件树,包括完全不变的子部件。

这种方法是合理的还是矫枉过正?

我是否必须将按钮放在不同的有状态的widget类上,然后再通过 setState() 每当我点击这个playButton的时候?

如果我有其他的widgets也会改变UI的状态,怎么办?可能会改变不同的小部件?

怎样才能在不影响性能的情况下做到这一点呢?

flutter dart flutter-layout
1个回答
0
投票

创建一个播放按钮,它是一个自己的小部件,有一个保持它是否在播放的状态,这绝对是有意义的。现在,当你在父部件上调用setState时,它确实会调用构建方法,但据我所知,它不一定会从头开始重新绘制一切。如果在一些嵌入的widget中没有发现变化,它不会重新绘制它们,因为它们已经在widget树中了。最后,调用setstate是可以的,但是如果你的应用程序开始变得更大,你发现自己在太多地方调用set state,并且想要使用全局键,我建议研究一下Provider包,并利用ChangeNotifierConsumer模式。

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