我用最终变量(例如密码)创建一个statefullwidget。 但是当我需要从扩展statefullwidget到setstate获取数据时,它显示错误
class Inputtextfield extends StatefulWidget {
const Inputtextfield({
Key key, this.label, this.onChange, this.password = false,
}) : super(key: key);
final String label;
final Function onChange;
final bool password;
@override
_InputtextfieldState createState() => _InputtextfieldState();
}
class _InputtextfieldState extends State<Inputtextfield> {
void _togglevisibility(){
setState(() {
widget.password = !widget.password;
});
}
我需要将其更改为Toggle,在setState错误中说password can't be setter,cause it final
,我尝试用Ctrl + . -> Make 'password' Not Final
修复错误,并进行了扩展statefullWidget的错误移动
答案 0 :(得分:1)
final
关键字可防止您重新分配其值。最好保持小部件构造函数的变量不变,并在State
本身中创建一个可变变量。
因此,要更改变量,您需要执行以下操作:
class _InputtextfieldState extends State<Inputtextfield> {
bool _password;
@override
void initState() {
super.initState();
_password = widget.password;
}
void _togglevisibility(){
setState(() {
// now, you can modify it
_password = !_password;
});
}
}
您可以阅读有关此讨论的更多信息:https://groups.google.com/g/flutter-dev/c/zRnFQU3iZZs/m/JX9ei27CBwAJ?pli=1
答案 1 :(得分:0)
很简单。 Final
个变量只能设置为ONCE
。设置它们后,它们将无法更改。
final bool password = true; // this value cannot be changed again
在您的情况下,如果要更新password
的值,则必须通过删除Not Final
关键字使它成为final
,即:
bool password = false; // this can now be changed later using `setState()`
答案 2 :(得分:0)