Flutter中给TextField绑定TextEditingController报Invalid constant value错误如何解决?
错误诱因
你给绑定了controller的TextField组件添加了const修饰符。const要求组件的所有属性都必须是编译时常量,但你在State类中声明的emailController、passwordController是运行时才会初始化的实例变量,不属于常量,因此触发了非法常量值的报错。
解决方案
直接删除两个TextField前面的const关键字即可,修改后对应代码段如下:
// 移除此处的const修饰符 TextField( keyboardType: TextInputType.emailAddress, decoration: InputDecoration( labelText: "Email", labelStyle: TextStyle( fontSize: 15.0, ), hintText: "Email address", hintStyle: TextStyle(fontSize: 12.0, color: Colors.grey), ), style: TextStyle(fontSize: 15.0), controller: emailController, ), const SizedBox( height: 10.0, ), // 同样移除此处的const修饰符 TextField( controller: passwordController, keyboardType: TextInputType.visiblePassword, decoration: InputDecoration( labelText: "Password", labelStyle: TextStyle(fontSize: 15.0), hintText: "Your password", hintStyle: TextStyle(fontSize: 12.0, color: Colors.grey), ), obscureText: true, style: TextStyle(fontSize: 15.0), ),
额外优化建议
- 你当前注释了
dispose方法,后续记得放开注释,TextEditingController使用完毕后必须调用dispose释放资源,否则会产生内存泄漏。 - 代码中使用的
FlatButton已经在新版Flutter中被弃用,建议替换为TextButton组件,避免废弃警告。
内容的提问来源于stack exchange,提问作者Prem Tamang
相关产品推荐
相关产品推荐

