You need to enable JavaScript to run this app. Flutter 如何从StatelessWidget更新StatefulWidget的状态
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 如何从StatelessWidget更新StatefulWidget的状态

问题排查与解决方案

核心问题点

  • 原Body是StatelessWidget,无状态组件本身不具备setState方法,直接修改局部变量不会触发组件重建逻辑。
  • 哪怕你尝试将Body改成有状态组件,只要evaluateAnswer还定义在build方法内部作为局部变量,setState触发重建时会重新执行build逻辑,直接把变量重置为初始的false,修改后的值会被直接覆盖完全留不住。

正确实现代码

按以下逻辑修改即可实现点击按钮更新状态、QuestionsList同步拿到新值重建:

class Body extends StatefulWidget {
  @override
  _BodyState createState() => _BodyState();
}

class _BodyState extends State<Body> {
  // 将状态变量提升到State类的成员位置,不要写在build方法内
  bool evaluateAnswer = false;

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Padding(
          child: QuestionsList(
            evaluate: evaluateAnswer,
          ),
        ),
        Positioned(
          bottom: 0,
          child: Container(
            height: 80,
            decoration: BoxDecoration(color: Colors.white),
            width: SizeConfig.screenWidth,
            child: SubmitExamButton(
              onPress: () {
                // 用setState包裹赋值操作,触发组件重建
                setState(() {
                  evaluateAnswer = true;
                });
              },
            ),
          ),
        ),
      ],
    );
  }
}

注意:后续如果需要切换evaluateAnswer的值,无论设为true还是false,都必须放在setState的回调里修改,否则不会触发组件重建。

内容的提问来源于stack exchange,提问作者biniyam112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.11 11:06:04