如何在一个按钮上按OnPress插入两个动作-删除小部件并通过new创建它?

时间:2019-09-30 12:04:28

标签: flutter textedit flutter-web

在我试图显示的图片上:

  • 1-1-看起来如何错误。
  • 2-2-我如何解决它。

    但是只能通过同时按下两个按钮(首先是DELETE,然后是RANDOM)来工作

最好只做一个动作,但我还没有做。

in short

,我试图插入代码以删除小部件并通过一键式操作由新创建它。但是它不起作用。  我不明白为什么以及如何使它起作用?

代码:https://github.com/develop86229/editTextControl

          FlatButton(
           child: Text("RANDOM"),
                onPressed: () {
                  setState(() {
                    textWidget = Container();
                    textWidget = Form(
                        key: _textKey,
                        child: TextFormField(
                          controller: myTextController,
                        ));
                   myTextController.text = rnd.nextInt(1000000000).toString();
                  });

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            textWidget,
            FlatButton(
                child: Text("RANDOM"),
                onPressed: () {
                  setState(() {
                    textWidget = Container();
                    textWidget = Form(
                        key: _textKey,
                        child: TextFormField(
                          controller: myTextController,
                        ));
                  });
                  myTextController.text = rnd.nextInt(1000000000).toString();
                }),
            FlatButton(
                child: Text("DELETE"),
                onPressed: () {
                  setState(() {
                    textWidget = Container();
                  });
                }),
          ],
        ),
      ),
    );

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为您在状态中设置了一个新值,然后在其中设置了另一个值,然后才进行更新。一切正常。

但是,如果要先删除项目然后再创建一个新项目,则可以像这样延迟第二个操作:

            onPressed: () {
              setState(() {
                textWidget = Container();
              });

              Future.delayed(const Duration(milliseconds: 500), () {
                setState(() {
                    textWidget = Form(
                        key: _textKey,
                        child: TextFormField(
                          controller: myTextController,
                        ));
                });
                myTextController.text = rnd.nextInt(1000000000).toString();
              });
            },