【问题标题】:TextField ErrorText Will not Refresh StateTextField ErrorText 不会刷新状态
【发布时间】:2018-12-26 20:21:33
【问题描述】:

我目前在 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...),
    ),
),

我应该如何正确更新文本的状态?与我在网上查看的许多指南相比,我看不出我正在做的事情有什么不同。

【问题讨论】:

    标签: dart flutter


    【解决方案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
    );
    }
    }
    

    【讨论】:

    • 谢谢您,这非常有效。除非您将简单对话框设为自己的类,否则无法实时刷新状态似乎很奇怪。
    • 这就是对话框的工作方式。如果我们像以前那样简单地打开它,那么一个简单的对话框就可以作为一个无状态的小部件。但要使其有状态,我们必须在 showDialog 函数中创建一个有状态的小部件。
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多