我目前在SimpleDialog中嵌入了一个TextField用于输入信息。输入的信息在使用之前需要进行验证。如果此验证失败,我想使用TextField的ErrorText字段显示错误消息。当用户按下“保存”按钮时,就会发生这种验证。
失败时,我将文本的值从null更新为“ Error!”。我知道这样做是正确的,因为如果我退出SimpleDialog,然后返回对话框,则文本将被更新。显然,这是状态问题。
这是我保存按钮的OnPressed方法的代码:
onPressed: () {
if (!checkDevEUICorrectness()) {
setState(() {
devEUIErrorText = "Error!";
});
}
else {
setState((){
devEUIErrorText = null;
});
}
},
下面是TextField的简短代码:
new TextField(
controller: devEUIController,
decoration: new InputDecoration(
errorText: devEUIErrorText,
// This is the save button whose code is above
icon: new IconButton(...implementation...),
),
),
如何正确更新文本状态?与我在网上看到的许多指南相比,我的所做的工作并没有什么不同。
答案 0 :(得分:1)
您发布的代码没有任何帮助,但我认为这可能是错误。
当我们在按钮上打开SimpleDialog
时,请单击并尝试在其中执行某些操作。
请注意SimpleDialog
在这里起着stateless widget .
的作用
当我们写
showDialog(
context: context,
builder: (BuildContext context){
return SimpeDialog(
.... // the code for deigning the simpleDialog
);
});
尽管这样做,您所要做的还是。 您需要执行以下操作:-
showDialog(
context: context,
builder: (BuildContext context){
return DialogDemo();
});
在该DialogDemo
中创建一个stateful widget
,然后在该小部件副本内将所有代码粘贴到您的主要构建函数下。
class DialogDemo extends StatefulWidget {
DialogDemoState createState() => new DialogDemoState();
}
class DialogDemoState extends State<DialogDemo> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return SimpleDialog(
.... // the code for deigning the simpleDialog
);
}
}