Flutter创建Checkbox复选框时setState()未识别标红报错求助
报错原因
setState() 是 Flutter 框架给 有状态组件对应的State类 提供的专属方法,出现无法识别、标红的问题,基本都是以下两类情况:
- 你当前写代码的组件是继承自
StatelessWidget的无状态组件,这类组件本身没有setState方法,编译器自然识别不到 - 你虽然用了StatefulWidget,但要么把
fpass变量写在了build方法内部/Widget的属性定义区(没有放在对应的State子类里),要么是在State的作用域范围外调用了setState
修复步骤
- 将当前承载这段代码的组件从
StatelessWidget重构为StatefulWidget(Android Studio/VS Code里可以把光标放在StatelessWidget类名上,按快捷键Alt+Enter/Option+Enter一键转换) - 把控制显隐的
fpass布尔变量,移动到对应State子类的成员变量位置,不要写在build方法内部 - 确认setState的调用位置在State类的作用域内,不要在组件外的独立函数/其他类里调用当前组件的setState
正确可运行代码参考
// 必须是StatefulWidget class PasswordFieldPage extends StatefulWidget { const PasswordFieldPage({super.key}); @override State<PasswordFieldPage> createState() => _PasswordFieldPageState(); } class _PasswordFieldPageState extends State<PasswordFieldPage> { // fpass变量放在State类的成员位置,不要放到build里 bool fpass = false; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("密码显隐 demo")), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ // 密码输入框可通过fpass变量控制obscureText属性 TextField( obscureText: !fpass, decoration: const InputDecoration(labelText: "密码"), ), CheckboxListTile( title: const Text("显示密码"), value: fpass, onChanged: (value) { // 这里在State作用域内,setState可正常识别调用 setState(() { fpass = value!; }); }, ) ], ), ), ); } }
其他排查点
如果以上操作做完还是标红,检查下setState的拼写:必须是小驼峰格式,首字母小写,写成SetState、setstate这类大小写错误的写法,编译器同样无法识别。
内容的提问来源于stack exchange,提问作者Bagas Rizkiyanto
相关产品推荐
相关产品推荐

