Flutter中Switch控件滑动后始终回弹到关闭状态如何解决
问题原因
这个问题90%的场景是你把isSwitched31变量定义在了当前组件的build方法内部。
每次调用setState都会触发组件重绘,build方法会重新执行,你定义在build内的变量会被重新初始化为false,就会出现打印值已经变更,但界面重绘后又被重置为初始状态的回弹效果。
修复方案
- 将
isSwitched31定义为当前StatefulWidget对应State类的全局成员变量,不要放在build方法内部,正确代码结构如下:
class YourFormWidget extends StatefulWidget { const YourFormWidget({super.key}); @override State<YourFormWidget> createState() => _YourFormWidgetState(); } class _YourFormWidgetState extends State<YourFormWidget> { // 变量定义在State类内部,build方法外部 bool isSwitched31 = false; @override Widget build(BuildContext context) { // 不要在这里定义isSwitched31 return Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Text( 'nuevopaciente31'.tr().toString(), style: const TextStyle(fontSize: 18), ), const Spacer(), Switch( value: isSwitched31, onChanged: (value) { setState(() { isSwitched31 = value; print(isSwitched31); }); }, activeTrackColor: Colors.lightGreenAccent, activeColor: Colors.green, ), ], ), ); } }
- 如果调整位置后还是有问题,检查两个点:
- 你是否在build方法内写了额外的赋值逻辑,每次重绘时都会把
isSwitched31强制赋值为false - 如果你使用了Form表单组件封装Switch,检查对应的FormField的
initialValue是否写死为false,没有和你的状态变量做绑定
- 你是否在build方法内写了额外的赋值逻辑,每次重绘时都会把
内容的提问来源于stack exchange,提问作者mvasco
相关产品推荐
相关产品推荐

