学习原文:https://zhuanlan.zhihu.com/p/149603388 ![]() 当按钮被点击时,showTestDialog()方法被执行。界面将显示一个小窗口,里面有一个复选框。 我们要实现的效果当然是用户点击复选框的时候,改变复选框的状态。因此,在复选框的onChanged()方法中改变了决定复选框状态的布尔值,并setState()。 然而真实的运行结果并非像预期那样产生效果。 究其原因,我们还需从setState()说起。 顾名思义,setState()要求其作用对象必须是一个有状态的组件。如果作用对象本身无状态,那么setState()将无法起作用。 因此,我们找到原因:SimpleDialog()中的子组件默认是无状态的。 接下来的解决办法就简单了,只需要在SimpleDialog组件外部“套”一个StatefulBuilder组件即可。参考下面的代码: ![]() 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |