什么时候在 Flutter 中使用 setState?

新手上路,请多包涵

作为颤振的新手,在 Flutter 应用程序中使用 setState 时,我感到非常困惑。在下面的代码中 boolean searching 和 var resBodysetState 中使用。我的问题是为什么只有 searchingresBody 在 setState 中?为什么其他变量不可变?

 var resBody;
bool searching =  false,api_no_limit = false;
String user = null;

Future _getUser(String text) async{
setState(() {
  searching = true;
});
user = text;
_textController.clear();
String url = "https://api.github.com/users/"+text;
  var res = await http
      .get(Uri.encodeFull(url), headers: {"Accept":
           "application/json"});
  setState(() {
    resBody = json.decode(res.body);
  });
}

原文由 Yeahia2508 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 415
2 个回答

根据 文档

调用 setState 会通知框架此对象的内部状态已以可能影响此子树中的用户界面的方式发生更改,这会导致框架为此 State 对象安排构建。

因此,如果小部件的状态发生更改 ,您必须 调用 setState 来触发视图的重建并立即看到新状态所暗示的更改。

无论如何,下面的片段是等效的。

第一种情况(直接形成 flutter create <myproject> ):

 class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {

    setState(() {
      // This call to setState tells the Flutter framework that something has
      // changed in this State, which causes it to rerun the build method below
      // so that the display can reflect the updated values. If we changed
      // _counter without calling setState(), then the build method would not be
      // called again, and so nothing would appear to happen.
      _counter++;
    });
  }

第二种情况:

 class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    _counter++;
    setState(() {});
  }

我不知道的原因是,如果第一种情况是使用 setState 的传统方式,我会说是因为代码的可读性。

原文由 attdona 发布,翻译遵循 CC BY-SA 4.0 许可协议

setState() 仅与 statefulWidget 内部颤振一起使用。 setState()setState() 中定义的内容发生变化时,告诉颤振重建页面。

NOT: setState() 是一个回调函数。

 Text(questions[questionIndex])

在这里,我想根据给定的问题数组更改文本,并且在每次单击按钮时,我想将索引增加 1。

 void answerQuesion() {
    setState(() {
      questionIndex = questionIndex + 1;
    });
    print(questionIndex);
  }

所以,我必须把这个索引增量放在 setState() 里面,这样flutter会在每次更改 questionIndex 后重建页面。

原文由 Manas Mishra 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题