Flutter: StatelessWidget.build called multiple times [duplicate]

折月煮酒 提交于 2019-12-19 07:27:05

问题


I always put code in my questions here, but this time it's not possible since the bug could be anywhere in a thousand lines of code. However:

I noticed that the build method of my main screen (StatelessWidget), which is a descendant of a MaterialApp (home property), get's as usual called once while in debug mode but three times when in release mode.

Under which circumstances could such a thing happen? I already tried reproducing multiple times, but failed.

EDIT:

The problem is that I am storing the screen size that I get from a media query as a global variable, so that I can access it from anywhere. Now I need to access that variable inside the init method of a stateful widget further down the tree. Seems to be no problem in debug mode, but in release mode the build method of the widget that makes the media query (must be inside build) weirdly gets called one time, the result of the media query being a Size(0.0, 0.0), then the init method of the widget further down the tree gets called and then the build method with the media query gets called another two times (this time with the correct screen size). The result is that I don't have he correct screen size inside the init method.


回答1:


https://docs.flutter.io/flutter/widgets/FutureBuilder-class.html

The future must have been obtained earlier, e.g. during State.initState, State.didUpdateConfig, or State.didChangeDependencies. It must not be created during the State.build or StatelessWidget.build method call when constructing the FutureBuilder. If the future is created at the same time as the FutureBuilder, then every time the FutureBuilder's parent is rebuilt, the asynchronous task will be restarted.

A general guideline is to assume that every build method could get called every frame, and to treat omitted calls as an optimization.

(taken from https://github.com/flutter/flutter/issues/27847#issuecomment-462868299)



来源:https://stackoverflow.com/questions/53223469/flutter-statelesswidget-build-called-multiple-times

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!