Flutter Stateful Widget 仅在构建时运行一次

Flutter Stateful Widget only runs once on build

今天我 运行 我的应用第一次出现这个问题。经过一些测试后,我发现我在 Widget 构建部分调用的方法仅在初始构建或热重载时 运行 一次。以前,这些方法总是 运行ning。例如,如果我在其中一种方法中打印了一个值为 5 的整数,则控制台将显示:

I/flutter (  510): 5
I/flutter (  510): 5
I/flutter (  510): 5
I/flutter (  510): 5
I/flutter (  510): 5

等...

现在控制台只打印一次整数(直到我热重载):

I/flutter (  510): 5
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel unknown, v1.12.13+hotfix.4, on Microsoft Windows [Version 10.0.18363.778], locale en-US)

[√] Android toolchain - develop for Android devices (Android SDK version 29.0.1)
[√] Android Studio (version 3.4)
[√] VS Code (version 1.44.2)
[√] Connected device (1 available)

• No issues found!

我的问题是,我是否首先正确地实现了这样的代码?有没有其他方法我应该这样做,或者 flutter 坏了?

谢谢,感谢您的帮助!

@override
  Widget build(BuildContext context) {

    // This code only runs once on the inital build
    createDay();
    getSaveContent();
    _updatePointsProgress();
    printStuff();

    return MaterialApp(
        home: Builder(

我不确定我是否误解了你的想法,但如果你的意思是你的函数在第一个构建方法之后被跳过,那么简单是不可能的。像这样。

@override
  Widget build(BuildContext context) {
   //Some code here runs once 

  //Some code here is running more often than above code 
    return MaterialApp(
        home: Builder(

这不是正在发生的事情。在您可能发生某些导致重建的事情之前,现在您的小部件没有重建。您的构建函数与任何其他函数一样,它从上到下执行每一行代码。要回答您的问题,您应该在构建方法中实现代码,该代码可以随时 运行 而没有任何负面影响。已经有一个关于保持构建方法清洁的好 Stack 线程,我会 link 它。初始化代码至少应该在构建方法之外,但更理想的是在 initState() 中。如果这不能回答您的问题,请告诉我。