Как вставить два действия по одной кнопке OnPress - удалить виджет и создать его по новой? - PullRequest
0 голосов
/ 30 сентября 2019

На картинке я пытался отобразить:

  • 1-1 - как выглядит ошибка.
  • 2-2 - как я ее решил.

    Но это работает только при нажатии обеих кнопок (сначала УДАЛИТЬ, а затем СЛУЧАЙНО)

Будет лучше сделать только одно действие, но я этого не сделал.

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 Ответ

1 голос
/ 30 сентября 2019

Это происходит потому, что вы устанавливаете новое значение в состоянии, затем устанавливаете другое значение в нем, и только тогда происходит обновление. Это работает, как и ожидалось.

Однако, если вы хотите сначала удалить элемент, а затем только создать новый, вы можете отложить второе действие следующим образом:

            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();
              });
            },
...