我有一个带有文本字段列表和下拉选项的屏幕.我在StatefulWidget类中声明了一个变量,并通过widget.variableName在类中使用它,但是在文本字段中输入一些值之后,我注意到小部件得到了更新,我的变量丢失了它的值,我留下了一个null变量.我尝试在initState()中初始化它,但它仍然失去了它的价值.
例:
class Screen extends StatefulWidget{
var variable;
@override
_ScreenState createState(){
variable = "dummyText";
return _ScreenState();
}
}
class _ScreenState extends State<Screen>{
@override
Widget build(BuildContext context) {
return Scaffold(
body: _layout(),
);
}
_layout(){
print(" value of variable: ${widget.variable}");
//imagine lots of textfields here in a listview
}
}
Run Code Online (Sandbox Code Playgroud)
在某些文本字段上输入文本后,它variable会丢失它的值并重置为null.我怎样才能保持它的价值,或者我应该在哪里宣布它不会失去它的价值.
您不能在StatefulWidget子类中设置可变变量.所有字段StatefulWidget必须是final或const.
相反,将该变量移动到State子类中.
class Screen extends StatefulWidget {
_ScreenState createState() => _ScreenState();
}
class _ScreenState extends State<Screen> {
String variable;
@override
void initState() {
variable = "dummyText";
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _layout(),
);
}
_layout() {
print(" value of variable: $variable");
//imagine lots of textfields here in a listview
}
}
Run Code Online (Sandbox Code Playgroud)
任何状态(即变量)都应该保存在继承的类中State.继承StatefulWidget的类实际上应该只有final变量 - 如果你看一下Dart Analysis它实际上应该在继承一个@immutable类时显示错误.
如果没有更多关于你正在做什么的上下文,很难说,但是通常如果将值传递给对象,则要将其作为继承的类中的最终变量StatefulWidget存储,并将实际值存储在State中实际影响变化的地方.
Flutter针对构建对象进行了优化,因此不必担心多次实例化对象的性能影响.
请注意,如果您的类是保持变量的正确位置,但您还需要初始值,则可以将初始值传递给StatefulWidget,然后将值检索到initState调用中的State中.
我建议阅读有关无状态和有状态小部件的颤振教程的一部分,以深入了解它们的工作原理.
| 归档时间: |
|
| 查看次数: |
1748 次 |
| 最近记录: |