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
相关产品推荐
相关产品推荐

